简化循环以获取类的属性

时间:2016-12-12 21:58:22

标签: c# linq

我有两个foreach循环来线性地获取我的一个类的所有属性。

foreach (PropertyInfo property in GetType().GetProperties())
{
  foreach (Attribute attribute in property.GetCustomAttributes(true))
  {
  }
}

如何将这两个循环简化为一个循环或linq操作以获取类属性?

2 个答案:

答案 0 :(得分:6)

您可以依靠SelectMany()

var attributes = GetType().GetProperties()
                     .SelectMany(p => p.GetCustomAttributes(true));

foreach (var attribute in attributes)
{
    // Code goes here
}

答案 1 :(得分:4)

或使用查询表示法:

var attributes=from p in yourObject.GetType().GetProperties()
               from a in p.GetCustomAttributes(true)
               select a;