4

IEnumerableタイプのコレクションにプロパティが含まれているかどうかを調べようとしています。

RowModelsタイプのコレクションであると仮定するとIEnumerable、私は...

  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.
4

2 に答える 2

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>()メソッドは、指定されたタイプのタイプのみに自動的にフィルターをかけます。これには、強く型付けされた変数も提供できるという利点があります。

于 2013-03-15T18:44:00.583 に答える
2

次のように変更ifします。

if(items.GetType().GetProperty("TRId") != null)
//yeah, there is a TRId property
else
//nope!
于 2013-03-15T18:44:53.477 に答える