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

标签 c# expression-trees

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

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/

相关文章:

c# - In-Clause 在 LINQ 查询中多久计算一次?

c# - 从 Linq-to-Entities 中选择 Linq-to-XML?

c# - 使用 Alexa.net - 我可以从代码中调用 intent 吗?

c# - 为什么我不能让这些扩展工作?

c# - 使用导致异常的表达式过滤 EfCore DbSet

c# - 如何生成对方法参数的 `Expression` 引用

c# - .NET Web 服务无法生成临时类

linq - Queryable.OfType 如何工作?

c# - 如何创建 NodeType 为 ExpressionType.Index 的 .NET 表达式?

c# - 如何在表达式树中编写 string.Contains(someText)