c# 通过Delegate.CreateDelegate操作PropertyInfo,获取int字段值报错

想通过Delegate.CreateDelegate使用PropertyInfo,以优化PropertyInfo操作效率

发现 string 类型字段可以正常获取。

img

但 int 类型字段会报错:无法绑定到目标方法,因其签名或安全透明度与委托类型的签名或安全透明度不兼容。

img

百度这个报错没有看到解决办法。

想问问怎么通过 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回答其实思路是对的。