是否有一种方法可以找到给定类型的所有属性,而无需在。net中显式设置BrowsableAttribute为Yes ?
我尝试了以下代码,但没有成功(所有默认可浏览的属性也被返回):
PropertyDescriptorCollection browsableProperties = TypeDescriptor.GetProperties(type, new Attribute[] { BrowsableAttribute.Yes });
这里稍微考虑一下linq会有帮助。
var result = type
.GetProperties()
.Where(x =>
x.GetCustomAttribute<BrowsableAttribute>() == null ||
!x.GetCustomAttribute<BrowsableAttribute>().Browsable)
.ToList();
可以引入一个局部变量来避免两次调用GetCustomAttribute
方法。
如果你的。net框架版本小于4.5,你可以编写自己的GetCustomAttribute
扩展方法,像这样
public static T GetCustomAttribute<T>(this MemberInfo element) where T: Attribute
{
return (T) element.GetCustomAttribute(typeof(T));
}