C# 在C语言中使用反射#

C# 在C语言中使用反射#,c#,reflection,C#,Reflection,根据答案,我尝试复制它并迭代我的CustomerModel属性 CustomerModel pippo = new CustomerModel(); Type customer = pippo.GetType(); FieldInfo[] fields = customer.GetFields(BindingFlags.Public | BindingFlags.Instance); 当使用调试器时,字段总是有一个计数=0,但是CustomerModel有很多我想在字段中看到的公共属性。我该怎

根据答案,我尝试复制它并迭代我的CustomerModel属性

CustomerModel pippo = new CustomerModel();
Type customer = pippo.GetType();
FieldInfo[] fields = customer.GetFields(BindingFlags.Public | BindingFlags.Instance);
当使用调试器时,
字段
总是有一个
计数=0
,但是CustomerModel有很多我想在字段中看到的公共属性。我该怎么做?这是我想看的一些属性的摘录

    [DataMember]
    public String Id { get; set; }

    [DataMember]
    public String LoginName { get; set; }

    [DataMember]
    public String Password { get; set; }

    [DataMember]
    public String CreationDate { get; set; }

也许绑定标志不正确?我不熟悉反射的使用。

这些是属性,而不是字段。使用
GetProperties
而不是
GetFields

在C#中:


正如Joe正确指出的,所讨论的成员是属性而不是字段。这些是自动实现的属性,编译器将为它们生成支持字段。但是,这些字段不会是公共的,因此
GetFields
调用失败,因为它只查找公共成员。如果要查看生成的字段,请将代码更改为

FieldInfo[] fields = customer.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

它起作用了!非常感谢并原谅这个愚蠢的问题,但这确实是我第一次使用反射。。。再次感谢!:)没问题。随着你越来越深入思考,你会发现你可以用它做各种各样的酷东西(还有很多危险的东西:)。我建议把变量名从
customer
改为
customerType
或类似的东西
customer
听起来更像是
CustomerModel
的一个实例,而不是它的类型。是的,我甚至不再存储变量,只是获取属性。。。这只是为了测试的目的。+1我现在对检索私有字段不感兴趣,但这是我刚刚学到的新东西-谢谢发布!
FieldInfo[] fields = customer.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);