获取Browsable属性的所有属性

时间:2015-02-11 15:11:12

标签: c# properties attributes system.reflection

我有一个有很多属性的类,有些属性有Browsable属性。

public class MyClass
{
    public int Id;
    public string Name;
    public string City;

    public int prpId
    {
        get { return Id; }
        set { Id = value; }
    }

    [Browsable(false)]
    public string prpName
    {
        get { return Name; }
        set { Name = value; }
    }

    [Browsable(true)]
    public string prpCity
    {
        get { return City; }
        set { City= value; }
    }
}

现在使用Reflection,如何过滤具有Browsable attributes的属性?在这种情况下,我只需要prpNameprpCity

这是我到目前为止尝试过的代码。

 List<PropertyInfo> pInfo = typeof(MyClass).GetProperties().ToList();

但这会选择所有属性。有没有办法过滤只有Browsable attributes的属性?

2 个答案:

答案 0 :(得分:1)

您可以使用Attribute.IsDefined方法检查属性中是否定义了Browsable属性:

typeof(MyClass).GetProperties()
               .Where(pi => Attribute.IsDefined(pi, typeof(BrowsableAttribute)))
               .ToList();

答案 1 :(得分:1)

要仅包含[Browsable(true)]的成员,您可以使用:

typeof(MyClass).GetProperties()
               .Where(pi => pi.GetCustomAttributes<BrowsableAttribute>().Contains(BrowsableAttribute.Yes))
               .ToList();