gpt4 book ai didi

c# - 表达式静态方法需要空实例非静态方法需要非空实例

转载 作者:太空狗 更新时间:2023-10-29 17:51:48 24 4
gpt4 key购买 nike

我刚开始使用表达式,但遇到以下错误:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com