2013-03-15 79 views
4

我正在試圖查找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. 
+0

好,和它的工作原理?如果是這樣,爲什麼這個問題?如果沒有,會發生什麼,你會得到一個錯誤?你的產出是不是預期的?如果是這樣,請解釋預期產出和實際產出。 – Servy 2013-03-15 18:40:40

回答

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>()方法會自動過濾出指定類型的類型。這也具有給你強類型變量的優點。

+0

看起來你更快=) – 2013-03-15 18:47:14

2

更改if到:

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