2016-06-21 8 views
-2

私はいくつかのプロパティを持つクラスを持っています。List<T>私は動的に指定されたリストのサイズを決定することができる必要があります。リフレクションを使用してリスト内のアイテム数を取得する方法

以下は私がこれまで持っていたコードです。 switch文を取り除き、これを一つの一般的なステートメントとして持つにはどうすればよいですか?私はList<T>にキャストしたいですが、それはうまくいきません。ジェネリック型指定されたList<>インターフェイスIListを実装しているため

switch (Inf.GetType() 
      .GetProperty(propertyName) 
      .GetValue(Inf) 
      .GetType() 
      .UnderlyingSystemType.GenericTypeArguments[0] 
      .Name) 
     { 
      case "String": 
       dynamicListCount = ((List<string>)Inf.GetType().GetProperty(propertyName).GetValue(Inf)).Count; 
       break; 
      case "Int32": 
       dynamicListCount = ((List<Int32>)Inf.GetType().GetProperty(propertyName).GetValue(Inf)).Count; 
       break; 
      default: 
       throw new Exception("Unknown list type"); 
     } 
+4

あなたはIList' 'としてキャストしていないのはなぜか? –

+0

なぜあなたが 'List 'を使わないのか分かりません.Count –

答えて

2

List<T>は(ICollectionから継承)Count性質を有するIListを実装します。

あなたは、単にIListとして値をキャストし、このような数を取得することができます

IList list = (IList) Inf.GetType() 
     .GetProperty(propertyName) 
     .GetValue(Inf); 

var count = list.Count; 
+0

私はIListにキャストしようとしました。ありがとう! – Carl

2

あなたはIListにそれを型キャストする必要があります。コメントと同じように示唆されています。 (クロスポスト)

List<string> items = new List<string>(); 

items.Add("item1"); 
items.Add("item2"); 


int count = ((IList)items).Count; 

MessageBox.Show(count.ToString()); 
関連する問題