2012-04-24 22 views
1

Expressionのファクトリメソッドを使用せずにlinq式を簡単に構築できます。Linq式の構築

Func<int, string> f = i => 
{ 
    var result = i.ToString(); 
    //... rest of the code 
    return result; 
}; 

Expression<Func<string>> f2 =() => f(123); 
var s = f2.Compile()(); 

ファクトリメソッドを呼び出すことによって手動で式を構築する利点は何ですか?

答えて

5

例:

  • あなたは、モデルの反射に基づいてクエリを構築しているあなたは、文字列に"(a.b + c) * 7"
  • を解析すなわち、入力に基づいてクエリを構築している
  • 事前には知りません
  • 複数の式を1つの式(訪問者パターン、多分)で構成しています
  • あなたはlambdaを使って有効に表現できないもの、つまりステートメントボディ、メンバー割り当てなどを提供していますしかし、lを経由しないambdaコンパイラ)
  • ラムダコンパイラを持たない言語/バージョンを使用しています。
  • あなたはそれがすべて私が表現パーサーを書いて
+0

をどのように機能するかを学びたい

  • )など、撮影しているもの、定数は何ですか。匿名関数へのコンパイルはlinq式へのコンパイルよりはるかに簡単です。私はどちらの方法が良いか知りたいし、より多くのアプリケーションを持っていますか? –

  • +0

    @mrtofigh *パーサ*を書くと、実行時におそらく実行されているので、 'Expression'を直接使用する必要があります。 lambdaは*コンパイラ*に(または 'CSharpCodeProvider'を使って)オフロードしている場合にのみ使用できます。個人的には、ここではILGeneratorを見てみたいと思いますが、私は少し難解です。 –

    関連する問題