【问题标题】:Error when creating a delegate from a MethodInfo从 MethodInfo 创建委托时出错
【发布时间】:2019-11-29 11:01:02
【问题描述】:

我有一个关于另一个问题的建议,替换这段代码:

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# delegates func


    【解决方案1】:

    这行是问题所在:

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

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

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

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

    【讨论】:

    • 好的,解决了。我从来没有真正和代表玩过,所以我不明白你博客中的那部分。谢谢
    猜你喜欢
    • 2011-03-02
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多