C# 调用相等的表达式方法
当我运行此代码时C# 调用相等的表达式方法,c#,lambda,expression,C#,Lambda,Expression,当我运行此代码时 Expression left = Expression.Constant(10, typeof(int)); Expression right = Expression.Constant(10,typeof(int)); var method10 = typeof(Expression).GetMethod("Equal", new[] { typeof(Expression), typeof(Expression) }); Expression exp = Express
Expression left = Expression.Constant(10, typeof(int));
Expression right = Expression.Constant(10,typeof(int));
var method10 = typeof(Expression).GetMethod("Equal", new[] { typeof(Expression), typeof(Expression) });
Expression exp = Expression.Call(method10,left,right);
var lambda = Expression.Lambda<Func<bool>>(exp);
var compiled = lambda.Compile().DynamicInvoke();
Expression left=Expression.Constant(10,typeof(int));
表达式右=表达式常数(10,typeof(int));
var method10=typeof(Expression).GetMethod(“相等”,新[]{typeof(Expression),typeof(Expression)});
Expression=Expression.Call(method10,左,右);
var lambda=表达式.lambda(exp);
var compiled=lambda.Compile().DynamicInvoke();
我得到下面的错误
其他信息:类型为'System.Int32'
的表达式不能用于方法'System.Linq.Expressions.Expression'
的类型为'System.Linq.Expressions.BinaryExpression Equal(System.Linq.Expressions.Expression,System.Linq.Expressions.Expression)
请重试
var exp = Expression.MakeBinary(ExpressionType.Equal, left, right);
而不是
var method10 = typeof(Expression).GetMethod("Equal", new[] { typeof(Expression), typeof(Expression) });
Expression exp = Expression.Call(method10,left,right);
试一试
而不是
var method10 = typeof(Expression).GetMethod("Equal", new[] { typeof(Expression), typeof(Expression) });
Expression exp = Expression.Call(method10,left,right);
你不需要反思,除非我遗漏了什么:
Expression left = Expression.Constant(10, typeof(int));
Expression right = Expression.Constant(10,typeof(int));
Expression exp = Expression.Equal(left, right);
var lambda = Expression.Lambda<Func<bool>>(exp);
但是请注意有一个细微的区别:表达式.Equal
将使用=
运算符,而另一个代码将使用Equals
方法
如果确实要从字符串生成表达式,请执行以下操作:
string methodName = "Equal";
MethodInfo method10 = typeof(Expression).GetMethod(methodName, new[] { typeof(Expression), typeof(Expression) });
Expression exp = (Expression)method10.Invoke(null, new object[] { left, right });
var lambda = Expression.Lambda<Func<bool>>(exp);
使用
Enum.Parse
不需要反射,除非我遗漏了什么:
Expression left = Expression.Constant(10, typeof(int));
Expression right = Expression.Constant(10,typeof(int));
Expression exp = Expression.Equal(left, right);
var lambda = Expression.Lambda<Func<bool>>(exp);
但是请注意有一个细微的区别:表达式.Equal
将使用=
运算符,而另一个代码将使用Equals
方法
如果确实要从字符串生成表达式,请执行以下操作:
string methodName = "Equal";
MethodInfo method10 = typeof(Expression).GetMethod(methodName, new[] { typeof(Expression), typeof(Expression) });
Expression exp = (Expression)method10.Invoke(null, new object[] { left, right });
var lambda = Expression.Lambda<Func<bool>>(exp);
使用
Enum.Parse
我解决了这个问题。谢谢各位
Expression left = Expression.Constant(10, typeof(int));
Expression right = Expression.Constant(10, typeof(int));
ExpressionType expressionType;
var tryParseRes = ExpressionType.TryParse("NotEqual", out expressionType);
var exp = Expression.MakeBinary(expressionType, left, right);
var lambda = Expression.Lambda<Func<bool>>(exp);
var compiled = lambda.Compile().DynamicInvoke();
if ((bool)compiled == false)
areEventCondiotionsPassed = false;
Expression left=Expression.Constant(10,typeof(int));
表达式右=表达式常数(10,typeof(int));
表达式类型表达式类型;
var tryParseRes=ExpressionType.TryParse(“NotEqual”,out ExpressionType);
var exp=Expression.MakeBinary(expressionType,左,右);
var lambda=表达式.lambda(exp);
var compiled=lambda.Compile().DynamicInvoke();
if((bool)compiled==false)
AreEventConditionsPassed=假;
我解决了它。谢谢各位
Expression left = Expression.Constant(10, typeof(int));
Expression right = Expression.Constant(10, typeof(int));
ExpressionType expressionType;
var tryParseRes = ExpressionType.TryParse("NotEqual", out expressionType);
var exp = Expression.MakeBinary(expressionType, left, right);
var lambda = Expression.Lambda<Func<bool>>(exp);
var compiled = lambda.Compile().DynamicInvoke();
if ((bool)compiled == false)
areEventCondiotionsPassed = false;
Expression left=Expression.Constant(10,typeof(int));
表达式右=表达式常数(10,typeof(int));
表达式类型表达式类型;
var tryParseRes=ExpressionType.TryParse(“NotEqual”,out ExpressionType);
var exp=Expression.MakeBinary(expressionType,左,右);
var lambda=表达式.lambda(exp);
var compiled=lambda.Compile().DynamicInvoke();
if((bool)compiled==false)
AreEventConditionsPassed=假;
非常感谢。它起作用了。但是我希望一些东西是动态的,能够调用任何方法,比如Equal、NotEqual等,并将我的代码保持在5到10行。它起作用了。但我希望它是动态的,能够调用任何方法,比如Equal、NotEqual等,并将我的代码保持在5到10行。你知道,我希望有一个有3个输入的方法。第一个:字符串,如GreaterThan、GreaterThanOrEqual、Equal、NotEqual等。第二个:int或string,第三个:int或string。并调用第一个方法,该方法是其他两个参数的字符串。@unosbaghaii然后使用Ondrej方法并使用参数ExpressionType.Equal
我想从string@unosbaghaii你知道,我想要一个有3个输入的方法。第一个:字符串,如GreaterThan、GreaterThanOrEqual、Equal、NotEqual等。第二个:int或string,第三个:int或string。并调用第一个方法,该方法是其他两个参数的字符串。@unosbaghaii然后使用Ondrej方法并使用参数ExpressionType.Equal
我想从string@unosbaghaii现在看,你是对的。是Visual Studio没有显示它。你是对的。是VisualStudio没有显示它。