想通过Delegate.CreateDelegate使用PropertyInfo,以优化PropertyInfo操作效率
发现 string 类型字段可以正常获取。
但 int 类型字段会报错:无法绑定到目标方法,因其签名或安全透明度与委托类型的签名或安全透明度不兼容。
百度这个报错没有看到解决办法。
想问问怎么通过 Delegate.CreateDelegate 获取 int 字段的值
我的代码如下:
```c#
public class People
{
public string Name { get; set; }
}
delegate object MemberGetDelegate(People p);
public class Program
{
static void Main()
{
People people = new People { Name = 1.ToString() };
Type type = typeof(People);
PropertyInfo property = type.GetProperty("Name");
MemberGetDelegate memberGet = (MemberGetDelegate)System.Delegate.CreateDelegate(typeof(MemberGetDelegate), property.GetGetMethod());
object value = memberGet(people);
}
}
```
类型指定错误了,object 改成int就ok了, delegate objectMemberGetDelegate(People p);改成 delegate int MemberGetDelegate(People p);。
代码直接改了,拿过去用就行了。
public class People
{
public int Name { get; set; }
}
delegate int MemberGetDelegate(People p);
public class Program
{
static void Main()
{
People people = new People { Name = 1 };
Type type = typeof(People);
PropertyInfo property = type.GetProperty("Name");
System.Reflection.MethodInfo mi = property.GetGetMethod();
MemberGetDelegate memberGet = (MemberGetDelegate)System.Delegate.CreateDelegate(typeof(MemberGetDelegate),mi);
object value = memberGet(people);
}
}
建议你用表达式树,相当于动态编译了,楼上的ai回答其实思路是对的。