型を使用Linq.Expression<T>
すると、後で評価および/または実行するためにプログラムで AST を定義できます。
しかし、実際には、この方法でメソッド シグネチャを定義することの意味は次のとおりです。
public void SomeMethod1(Func<bool> func) { ... } // 1.
それ以外の
public void SomeMethod2(Expression<Func<bool>> expr) { ... } // 2.
明らかに、結果を取得する方法は次のようにFunc<bool>
異なります。
var result = func(); // 1.
に
var func = expr.Compile() // 2.
var result = func();
生の実用レベルでも呼び出しは似ています:
SomeMethod1(() => true); // A.
SomeMethod1(() => AMethodReturnsABool()); // B.
SomeMethod1(AMethodReturnsABool); // C.
コンパイル レベルではメソッド グループ構文SomeMethod2
を受け入れないという違いがあります。
//SomeMethod2(AMethodReturnsABool); // -> don't compile
標準デリゲートを使用して署名を定義する必要がある場合、Action<T,...>
または?Func<T,..>
内でそれらを定義する必要がある場合。Expression<T>