System.Linq.Expressions.Expression.CanReduce属性是什么意思?

时间:2015-04-24 12:22:40

标签: linq linq-expressions custom-linq-providers

the documentation及其名称暗示,可以推断,对于可以进一步分解为较小表达式的所有表达式,CanReduce属性的值必须设置为true,并且反之亦然。

但仔细观察后,这种推论似乎并非在所有情况下都适用。以LambdaExpression为例,这当然是一个复合单元。但直接从LambdaExpression类派生的Expression类不会覆盖CanReduce属性。 Expression类将CanReduce属性定义为虚拟,其实现返回false,因此暗示lambda表达式不能进一步简化,这是不正确的。

这个属性的真正含义是什么?

1 个答案:

答案 0 :(得分:1)

我认为您正在阅读错误的文档。 "减少"这并不意味着分解为多个更简单的表达式,这意味着转换为使用更多基本操作的单个表达式。例如,请考虑以下ListInitExpression(使用类似C#的语法):

new List<int> { 1, new Random().Next() }

在此表达式上调用CanReduce将返回true。并且调用Reduce()将返回:

{
    Param_0 = new List<int>();
    Param_0.Add(1);
    Param_0.Add(new Random().Next());
    return Param_0;
}

我不清楚Reduce()LambdaExpression返回时应该{{1}},所以对我来说这是不可理解的。