我有一个有很多属性的类,有些属性有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
的属性?在这种情况下,我只需要prpName
和prpCity
。
这是我到目前为止尝试过的代码。
List<PropertyInfo> pInfo = typeof(MyClass).GetProperties().ToList();
但这会选择所有属性。有没有办法过滤只有Browsable attributes
的属性?
答案 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();