检查IEnumerable类型集合中的属性

时间:2013-03-15 18:39:39

标签: c# ienumerable

我试图找出类型IEnumerable的集合是否包含属性。

假设RowModelsIEnumerable类型的集合,我有......

  foreach (var items in RowModels) {
       if (items.GetType()
                .GetProperties()
                .Contains(items.GetType().GetProperty("TRId").Name) ) 
        {
               // do something...
        }
    }

我收到错误

System.Reflection.PropertyInfo[] does not contain a definition for 'Contains' 
and the best extension method overload has some invalid arguments.

2 个答案:

答案 0 :(得分:7)

您可以使用Enumerable.Any()

foreach (var items in RowModels) {
   if(items.GetType().GetProperties().Any(prop => prop.Name == "TRId") ) 
    {
           // do something...
    }
}

话虽如此,您也可以直接检查酒店:

foreach (var items in RowModels) {
   if(items.GetType().GetProperty("TRId") != null) 
    {
           // do something...
    }
}

此外 - 如果您正在寻找RowModels中实现特定界面或某些特定类的项目,您可以写下:

foreach (var items in RowModels.OfType<YourType>())
{
   // do something
}

OfType<T>()方法将自动过滤为指定类型的类型。这样做的好处是可以为您提供强类型变量。

答案 1 :(得分:2)

将您的if更改为:

if(items.GetType().GetProperty("TRId") != null)
//yeah, there is a TRId property
else
//nope!