繁体   English   中英

获取错误“静态方法需要空实例,非静态方法需要非空实例。” 尝试在 C# 中执行表达式树时

[英]Getting error “Static method requires null instance, non-static method requires non-null instance.” while trying to execute expression tree in C#

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

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM