构建表达式树来表示if
在完整的条件表达式上使用ExpressionSerialization反序列化表达式树,即三元运算符会给出错误。 如果我使用三元运算符,它会导致FullConditionExpression(系统不支持异常)
使用以下链接中的代码:
http://archive.msdn.microsoft.com/exprserialization
有没有可用于上述链接的最新版本?
http://metalinq.codeplex.com/
之后尝试过
public Expression<Func<object, string>> LabelCriteria { get; set; }
LabelCriteria = x =>
{
if (true)
return "Cash";
else
return " ";
}
表达式不支持if - else块。 它给出的错误为:“带有语句正文的lambda表达式不能转换为表达式树,是否有其他方式来执行它。
你可以使用像这样的方法:
string myFunction(Object obj){
//here your if-else...
}
LabelCriteria = x => myFunction(x);
您必须使用条件运算符:
LabelCriteria = x => true ? "Cash" : " ";
可能是由于常量折叠,编译器正在修改表达式,但是,因为条件是一个常量表达式( true
)。 尝试在那里使用一个变量,看看会发生什么。
您可以使用Expression API显式构建表达式树,请参阅https://msdn.microsoft.com/en-us/library/bb397951.aspx
这里是你的问题的代码:
ParameterExpression x = Expression.Parameter(typeof (object), "x");
ConditionalExpression body = Expression.IfThenElse(
Expression.Constant(true),
Expression.Constant("Cash"),
Expression.Constant(" ")
);
LabelCriteria = Expression.Lambda<Func<object, string>>(body, x);
链接地址: http://www.djcxy.com/p/84281.html
上一篇: Build expression trees to represent if
下一篇: Is there a better alternative than this to 'switch on type'?