57

この質問を最初に入力したとき、誰かがすでにこの質問をしているに違いないと確信して、重複した質問を見つけるために入力しました。私の計画は、この質問を投稿する代わりに、それらのだまされたリンクをたどることでした。しかし、この質問は私が見る限り以前に尋ねられたことはありません...「関連する質問」リストには表示されませんでした。

C# の式ツリーを深く理解するために見つけた最高のリソース (記事、書籍、ブログ投稿など) は何ですか? 私は彼らの能力に驚かされ続けており、今では「OK、十分な驚きです。今すぐやめて、これらの分野で博士号を取得したい」と言っているところまで来ています。機能を体系的かつ体系的にカバーし、それらを使用して何ができるかの詳細な例を紹介する資料を探しています。

注: ラムダ式について話しているのではありません。私は、Expression< T > と、それに付随し、そこから生じるすべてのものについて話しているのです。

ありがとう。

4

3 に答える 3

39

Programming Microsoft Linq (ISBN 13: 978-0-7356-2400-9 または ISBN 10: 0-7356-2400-3) の第 11 章 (Inside Expression Trees) と第 12 章 (Extending Linq) は、私にとってかけがえのないものでした。Jons の本は読んだことがありませんが、彼は質の高い人であり、物事をよく説明しているので、彼の報道も良いと思います。

もう 1 つの優れたリソースは、Bart De Smet のブログです。

また、MSDN にも注目してください。Simple Linq to Databaseを構築するためのサンプル コード(Pedram Rezaei による) は、約 40 ページの Doco で説明されています。

Expression Tree の非常に便利なリソースExpression Tree Visualiserデバッグ ツールです。

また、式ツリー ビジターについてできる限り多くのことを学ぶ必要があります。かなり優れた基本クラスの実装がここにあります

これは、Visitor クラスから派生してデバッグを行うためのサンプル コードです (これは、私が言及した本のサンプル コードに基づいています)。レベル。

  internal class DebugDisplayTree : ExpressionVisitor
  {
    private int indentLevel = 0;

    protected override System.Linq.Expressions.Expression Visit(Expression exp)
    {
      if (exp != null)
      {
        Trace.WriteLine(string.Format("{0} : {1} ", exp.NodeType, exp.GetType().ToString()).PrependIndent(indentLevel));
      }
      indentLevel++;
      Expression result = base.Visit(exp);
      indentLevel--;
      return result;
    }
    ...
于 2009-03-25T22:20:33.957 に答える
18

それらが包括的であるとは言いませんが、私のブログにExpressionは多数の投稿があります。英国に拠点を置く方は、5 月にDDD South Westでセッションを行う予定です (昨夜、遅すぎましたが ;-p)。必要に応じて、スライド デッキと関連記事からのリンクの一部を投稿できます... 残念ながら、話されることを意図した pptxは、賢明な単独の読み物になることはめったにありません。Expression

他の読書(ブログからではない):

(そして、ここと microsoft.public.dotnet.languages.csharp の大量の投稿 - 検索してみてください: +expression -regex -"regular expression"

于 2009-03-26T08:28:58.067 に答える
5

スキームを学びます。式はラムダ計算と同じ原則を使用するため、より良い洞察が得られます。

または、DLR を見ることもできます。これは似ていますが、それほどエレガントではありません。

于 2009-03-26T11:32:50.650 に答える