使用 Jon Skeet 的文章使反射飞起来并探索委托作为指南,我尝试使用 Delegate.CreateDelegate 方法将属性复制为委托。这是一个示例类:
public class PropertyGetter
{
public int Prop1 {get;set;}
public string Prop2 {get;set;}
public object GetPropValue(string propertyName)
{
var property = GetType().GetProperty(propertyName).GetGetMethod();
propertyDelegate = (Func<object>)Delegate.CreateDelegate(typeof(Func<object>), this, property);
return propertyDelegate();
}
}
我遇到的问题是,当我调用GetPropValue
并作为参数传入时"Prop1"
,我得到一个带有消息ArgumentException
的调用 当使用任何返回原始/值类型(包括结构)的属性时会发生这种情况。Delegate.CreateDelegate
"Cannot bind to the target method because its signature or security transparency is not compatible with that of the delegate type."
有人知道一种方法可以在这里同时使用引用类型和值类型吗?