从the documentation及其名称暗示,可以推断,对于可以进一步分解为较小表达式的所有表达式,CanReduce
属性的值必须设置为true,并且反之亦然。
但仔细观察后,这种推论似乎并非在所有情况下都适用。以LambdaExpression
为例,这当然是一个复合单元。但直接从LambdaExpression
类派生的Expression
类不会覆盖CanReduce
属性。 Expression
类将CanReduce
属性定义为虚拟,其实现返回false
,因此暗示lambda表达式不能进一步简化,这是不正确的。
这个属性的真正含义是什么?
答案 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}},所以对我来说这是不可理解的。