使用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>
?