我刚开始使用表达式,但遇到以下错误:
System.ArgumentException : Static method requires null instance, non-static method requires non-null instance.
Parameter name: method
代码如下:
int inP = 100;
object inParam = inP;
Type inParamType = inParam.GetType();
ParameterExpression pe = Expression.Parameter(typeof(S), "pe");
Expression left = Expression.Property(pe, typeof(S).GetProperty(propName));
Expression right = Expression.Constant(inParam, inParamType);
MethodInfo mi = inParamType.GetMethod(operand, BindingFlags.Instance | BindingFlags.Public, null, new Type[] { typeof(object) }, null);
Expression e1 = Expression.Call(mi, left, right);
最佳答案
您使用的是 BindingFlags.Instance
,因此您只会取回实例方法。实例方法必须作为 C# a.f(b)
调用,而不是 f(a, b)
,并且转换为表达式树 Expression.Call(left, mi , right)
,而不是 Expression.Call(mi, left, right)
。这就是异常告诉您的内容:
Static method requires null instance, non-static method requires non-null instance.
在这种情况下,您有一个非静态方法,因此您必须传入一个实例来调用该方法。
关于c# - 表达式静态方法需要空实例非静态方法需要非空实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31418020/