首页 > 解决方案 > 从 MethodInfo 创建委托时出错

问题描述

我对另一个问题提出了建议,以替换这段代码:

string ent = c.GetType().GetProperty(prop).GetGetMethod().Invoke(c, null).ToString();

有一个可以做同样事情的委托(但在性能方面应该快得多)。

这是我到目前为止提出的:

TestClass test = new TestClass (){DummyProp= "appo"};
string prop = "DummyProp";
MethodInfo method = typeof(TestClass ).GetProperty(prop).GetGetMethod();

Func<TestClass , string> getter= (Func<TestClass , string>)
   Delegate.CreateDelegate(typeof(Func<TestClass , string>), test, method);
Console.WriteLine(getter(test));

我要做的是在运行时获取 的实例中的属性值,TestClass该属性可以是其中的许多属性之一,并且需要哪个属性由某些条件决定

问题是我得到以下异常“目标方法无法绑定,因为它的签名或安全透明度与委托类型不兼容”。我错过了什么?

标签: c#delegatesfunc

解决方案


这条线是问题所在:

Delegate.CreateDelegate(typeof(Func<TestClass, string>), test, method);

您正在尝试创建一个开放委托,即未绑定到任何特定实例的委托 - 但您正在传递实例。如果将其更改为:

Delegate.CreateDelegate(typeof(Func<TestClass, string>), method);

然后它将创建一个适当的开放委托。


推荐阅读