构建表达式树来表示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'?