获取用属性标记的类中的所有属性

本文关键字:属性 获取 | 更新日期: 2023-09-27 18:03:01

我已经生成了一个自定义属性,它简单地将类属性标记为'显示名称'。我想做的是找到一个给定的类中的属性,它已被标记为我的属性。据我所知,我能做到这一点的唯一方法是循环遍历每个属性(通过反射)并检查它分配了哪些属性。还有比这更容易/更快的方法吗?

foreach (PropertyInfo property in myClassProperties)
{
  //Get the alias attributes.
  object[] attr=
  property.GetCustomAttributes(typeof(DisplayField), true);
  if(attr.Count() > 0)
  {
   // This is a display field!
  }
}

谢谢

获取用属性标记的类中的所有属性

这个比检查它的所有属性来找到你想要的稍微简单一点-你可以使用IsDefined:

询问任何成员它是否有特定的属性
var properties = type.GetProperties()
                     .Where(p => p.IsDefined(typeof(MyAttribute), false));

显然,如果你要多次使用它,你可以根据每个类型缓存结果。

据我所知,我能做到这一点的唯一方法是循环遍历每个属性(通过反射)并检查它分配了哪些属性。

就是这么做的。属性是在编译时嵌入程序集的元数据。为了在运行时访问它们,你需要反射。

我所知道的唯一更快的方法是静态或单例创建字典…这样以后的访问就更快了。我有时会这样做,但我完全按照您上面概述的检索属性功能来做。