我有一个类型,t并且我想获取具有属性的公共属性的列表MyAttribute。该属性用标记AllowMultiple = false,如下所示:
t
MyAttribute
AllowMultiple = false
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
目前我所拥有的是这个,但是我在想有一种更好的方法:
foreach (PropertyInfo prop in t.GetProperties()) { object[] attributes = prop.GetCustomAttributes(typeof(MyAttribute), true); if (attributes.Length == 1) { //Property with my custom attribute } }
我该如何改善?我很抱歉,如果这是重复的,那儿有大量的反射线程……似乎这是一个非常热门的话题。
var props = t.GetProperties().Where( prop => Attribute.IsDefined(prop, typeof(MyAttribute)));
这样避免了必须实现任何属性实例(即,它比便宜GetCustomAttribute[s]()。
GetCustomAttribute[s]()