我已经构建了一个类型为
Func<object,bool>
的表达式树。但是当我尝试编译它时,出现了异常:
类型为 'MyClass' 的 ParameterExpression 不能用于类型为 'System.Object' 的委托参数
调用对象的类型在运行时是未知的。
Expression leftFunc, rightFunc;
var x = Expression.Parameter(t);
if (left_element.All(char.IsDigit))
leftFunc = Expression.Constant(int.Parse(left_element));
else
leftFunc = Expression.PropertyOrField(x, left_element);
if (right_element.All(char.IsDigit))
rightFunc = Expression.Constant(int.Parse(right_element));
else
rightFunc = Expression.PropertyOrField(x, right_element);
var result = Expression.Lambda<Func<object, bool>>(
Expression.GreaterThan(leftFunc, rightFunc), x); //exception thrown on this line
return result;
x
是 MyClass
类型的,我能以某种方式使用转换器吗?
Expression.Lambda<Func<MyClass,bool>>
。 - RobExpression
?如果是这样的话,通过普通反射来完成会更容易些。 - Rob