0

型を使用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>

4

1 に答える 1