如何解决得到错误“静态方法需要空实例,非静态方法需要非空实例”试图在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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。