从方法信息创建委托时出错



我得到了另一个问题的建议,替换这段代码:

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实例中属性的值,该属性可以是其中的许多属性之一,并且需要哪一个由某些条件决定

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

这一行是问题所在:

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

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

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

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

相关内容

最新更新