質問

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

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

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

ありがとう。

役に立ちましたか?

解決

『Programming Microsoft Linq』 (ISBN 13:) の第 11 章 (式ツリーの内部) および第 12 章 (Linq の拡張)978-0-7356-2400-9 または ISBN 10:0-7356-2400-3) は私にとって非常に貴重です。私はジョンズの本を読んだことがありませんが、彼は質の高い人で物事をよく説明しているので、彼の報道も良いものになると思います。

もう 1 つの優れたリソースは、 バート・デ・スメットのブログ

また、MSDN を構築するためのサンプル コードにも注目してください。 データベースへの単純なリンク (Pedram Rezaei 著) では、約 40 ページにわたる Doco の説明が行われます。

Expression Tree にとって本当に本当に便利なリソースです。実際、私はそれを次のように考えています。 持つ必要があります それは 式ツリービジュアライザー デバッグツール。

また、式ツリー ビジターについてもできる限り学ぶ必要があります。非常に優れた基本クラスの実装があります。 ここ.

デバッグを行うために Visitor クラスから派生したサンプル コードを次に示します (これは、前述の本のサンプル コードに基づいています)。 prependIndent メソッドの呼び出しは、各インデントに「--」を挿入する文字列の単なる拡張メソッドです。レベル。

  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;
    }
    ...

他のヒント

それらが包括的であるとは言えませんが、いくつかあります。 Expression 投稿 私のブログで. 。あなたが英国に拠点を置いている場合は、私も次のようなセッションを行います。 ExpressionDDD サウスウェスト 5月に(そして 昨晩, 、しかし遅すぎます;-p)。ご希望であれば、スライドデッキと関連記事のリンクをいくつか投稿できます...残念ながら、pptx は 話した 賢明な独立した読書をすることはほとんどありません。

その他の読書 (ブログからではありません):

(そして、こことmicrosoft.public.dotnet.languages.csharpでの投稿のすべての投稿 - 検索を試してください:+expression -regex -「正規表現」

スキームをご覧ください。式はラムダ計算と同じ原則を使用し、したがって、あなたにいくつかの優れた洞察力を与えるだろう。

また、あなたは似ていますが、あまりエレガントでDLR、で見ることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top