表达式静态方法需要非空实例,非静态方法需要非空实例

本文关键字:实例 静态方法 表达式 | 更新日期: 2023-09-27 18:02:46

我是新的使用表达式和得到以下错误:

系统。静态方法需要null实例,非静态方法需要非空实例。
参数名称: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)。这就是异常告诉你的:

静态方法需要空实例,非静态方法需要非空实例。

在这种情况下,您有一个非静态方法,因此您必须传入一个实例来调用该方法。