一尘不染

如何获得具有给定属性的属性列表?

c#

我有一个类型,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
    }
}

我该如何改善?我很抱歉,如果这是重复的,那儿有大量的反射线程……似乎这是一个非常热门的话题。


阅读 213

收藏
2020-05-19

共1个答案

一尘不染

var props = t.GetProperties().Where(
                prop => Attribute.IsDefined(prop, typeof(MyAttribute)));

这样避免了必须实现任何属性实例(即,它比便宜GetCustomAttribute[s]()

2020-05-19