尝试在 C# 中执行表达式树时出现错误 "Static method requires null instance, non-static method requires non-null instance."

Getting error "Static method requires null instance, non-static method requires non-null instance." while trying to execute expression tree in C#

在 C# 中,我有一个 class MyNamespace.MyClass,在那个 class 中定义了一个方法 MyMethod。我试图在 MyObject 上调用此方法,MyClass class 的一个实例,但我在标题中收到错误。这是我的代码:

Expression.Lambda(Expression.Call(typeof(MyNamespace.MyClass).GetMethod("MyMethod"), Expression.Constant("MyParam"))).Compile().Method.Invoke(MyObject, null);

MyMethod 不是静态方法。我做错了什么?

首先获取 MethodInfo 的 Expression.Call 重载用于静态方法。您需要这个:Expression.Call,例如编译调用 myObject.MyMethod("MyParam") 的委托将是:

    var f = (Action)Expression.Lambda(Expression.Call(Expression.Constant(myObject), typeof(MyClass).GetMethod("MyMethod"),  Expression.Constant("MyParam"))).Compile();

    f();