2016-04-07 6 views
1

List<T>プロパティでカスタムクラスの値を取得しようとしていますが、例外がスローされます(オブジェクトはターゲットタイプと一致しません)。汎用リストプロパティの値を取得しようとしましたが、私に例外があります

値がNullであるかどうか最初にチェックし、値を処理したい場合は、まずチェックします。

モデル:モデルデータを処理するための

public class CustomModel 
{ 
    public List<Foo> FooList { get; set; } 

    public List<Bar> BarList { get; set; } 

} 

コード:

public class Result<T> 
{ 
    private readonly T _model; 

    public Result(T model) 
    { 
     _model = model; 
    } 

    private CustomObject CreateSomething(T model) 
    { 
     var obj = new CustomObject(); 

     var type = model.GetType(); 
     var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance); 

     foreach (var property in properties) 
     { 
      if (property.PropertyType.IsGenericType && 
       typeof(List<>).IsAssignableFrom(property.PropertyType.GetGenericTypeDefinition())) 
      { 

       //this throws an error 
       var testList = property.GetValue(this, new object[] { }); 

       //processed value will be passed to object 

       //some codes here after getting the property value 

      } 
     } 

     return obj; 
    } 
} 

私はそれらを処理することができますので、私は値を取得するにはどうすればよいですか?

+0

ちょうどあなたのコードをテストし、うまく動作します – Fabjan

+0

それは私の最後にはありません。 – rpmansion

+0

キーワード 'this'によって参照されているこのクラスの関連する部分で、より多くのコードを提供できますか(すべてのプロパティが「短いバージョン」ではない) – Fabjan

答えて

1

です -

それはvar testList = property.GetValue(FooList, new object[] { }); <すべきですか?プロパティは、モデルの代わりにこれから読み取られます。

var testList = property.GetValue(model, new object[] { }); 
           ^^^^^ 
+0

私の悪いです。例外なくプロパティの値を取得するモデルでなければなりません。 – rpmansion

1

にはMakeGenericType()という汎用タイプを使用する必要があります。

ような何か:MakeGenericType上

var listType = typeof(List<>).MakeGenericType(new[]{typeof(T)}); 
if (property.PropertyType.IsGenericType 
    && listType.IsAssignableFrom(property.PropertyType.GetGenericTypeDefinition())) 

さらに詳しい情報:https://msdn.microsoft.com/en-us/library/system.type.makegenerictype


var testList = property.GetValue(this, new object[] { });

はあなたが右のオブジェクトのインスタンスを渡しますか? thisここですか?それはタイプミスFooList

+0

例外が発生しました: 'オブジェクトがターゲットタイプと一致しません。 ' – rpmansion

関連する問題