6

在完整条件表达式上使用 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 表达式不能转换为表达式树。有没有其他方法可以做到这一点。

4

4 回答 4

5

您必须使用条件运算符:

LabelCriteria = x => true ? "Cash" : " ";

但是,编译器可能会因为常量折叠而修改表达式,因为条件是常量表达式 ( true)。尝试在那里使用一个变量,看看会发生什么。

于 2012-09-06T00:24:05.430 回答
5

您可以使用像这里这样的方法:

string myFunction(Object obj){
     //here your if-else...
}

LabelCriteria = x => myFunction(x);
于 2012-09-06T00:55:41.130 回答
1

您可以使用 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);
于 2015-02-10T01:09:54.110 回答
0

我找到了解决方案。

我正在使用这段特定的代码

使用以下链接中的代码:

http://archive.msdn.microsoft.com/exprserialization

它没有处理完整的条件表达式,但它处理条件表达式。我刚刚在反序列化的开关盒中添加了 FullConditionalExpression 并且它起作用了。它与 switch 中的 ConditionalExpression 相同。

于 2012-09-07T14:44:22.107 回答