尝试在 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();
在 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();