2016-04-05 12 views
4

List<T>のプロパティを持つジェネリッククラスを処理しようとしていました。ただし、IsAssignableFromを使用してプロパティをチェックすると機能しません。checkタイプがリストの場合はfalseを返します

コードスニペット:

var type = model.GetType(); 

var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); 
int colorIndex = 0; 

foreach (var property in properties) 
{ 
    if (typeof(List<>).IsAssignableFrom(property.PropertyType)) 
    { 
     //codes here 

    } 
} 

私はここで何かが足りないのですか?なぜそれがリストであってもリストを扱っていないのはなぜですか?

+0

オープンジェネリック型をそのように使うことはできないと思います...実際には、 'IList'をチェックするだけで十分でしょう。 –

答えて

7

modelオブジェクトには、特定のタイプのプロパティがあります(例:List<string>List<int>など)。私はあなたのコードしかし、オープンジェネリック型のテストです。これらのタイプは同じではないので、ifステートメントでは一致しません。あなたが基本となるオープンジェネリック型を取得するために機能GetGenericTypeDefinition()を使用する必要があることを修正するには:

if (typeof(IList).IsAssignableFrom(property.PropertyType) 
{ 

} 
:あなたはアイテムがIListのは、とても「契約」のではなく、具体的なクラスに対してチェックを行い実装しているかどうかを確認しようとすることができ
foreach (var property in properties) 
{ 
    if (property.PropertyType.IsGenericType && 
     typeof(List<>).IsAssignableFrom(property.PropertyType.GetGenericTypeDefinition())) 
    { 
     //codes here 

    } 
} 
3

+1

ありがとう、私の携帯電話から投稿されたので、私は少し速かった。更新を行いました! – Hypnobrew

関連する問題