0

按照这个答案,我试图复制它并迭代我的 CustomerModel 属性。

CustomerModel pippo = new CustomerModel();
Type customer = pippo.GetType();
FieldInfo[] fields = customer.GetFields(BindingFlags.Public | BindingFlags.Instance);

使用调试器时,fields总是有一个count = 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; }

也许绑定标志不正确?我是使用反射的新手。

4

2 回答 2

6

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

在 C# 中:

public class Foo {

    // this is a field:
    private string _name;

    // this is a property:
    public string Name { get; set; }

    // this is also a property:
    public string SomethingElse { get { return _name; } set { _name = value; } }

}
于 2013-07-25T15:55:56.980 回答
2

正如乔正确指出的那样,有问题的成员是属性而不是字段。这些是自动实现的属性,编译器将为它们生成支持字段。但是,这些字段不会公开,因此GetFields调用失败,因为它只寻找公共成员。如果要查看生成的字段,请将代码更改为以下

FieldInfo[] fields = customer.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
于 2013-07-25T15:59:42.063 回答