【发布时间】:2015-11-13 20:10:45
【问题描述】:
我有以下功能:
public double Probability(Expression<Func<double, bool>> predicate)
{
var expr = BinaryExpression.Lambda(predicate);
// Implementation
}
我这样称呼:
Probability(x => x > 3 && x > 4 && x > 5)
当我调试我的代码时,我可以看到 expr 看起来像这样:
() => x => (((x > 3) AndAlso (x > 4)) AndAlso (x > 5))
我希望能够将其减少为:() => x => (x > 5))
问题:有什么东西可以开箱即用,还是我必须自己实现?
额外问题:LambdaExpression 和 BinaryExpression 有什么区别?
【问题讨论】:
-
你的意思是除了把你的电话改成
Probability(x => x > 5);吗? ;) -
我不希望找到能做到这一点的东西,它本质上是优化编译器的(一个简单的)部分。重新奖励:
LambdaExpression表示您可以调用的方法——它有一个参数列表和一个主体。BinaryExpression只代表一个二进制操作——没有上下文,没有参数列表,你不能编译和调用它。 -
stackoverflow.com/questions/1101841/… 看看@JonSkeet 的 MaxBy() 扩展方法实现
-
我希望能够对其调用 Reduce(),但 BinaryExpression 上的 Reduce 没有任何作用。文档也不是很复杂...:-P
标签: c# .net lambda expression-trees