2016-07-29 3 views
0

私は、あるクラスのプロパティがnullかどうかを調べることを目的とする小さなメソッドを作成しました。プロパティがnullの場合は、新しいインスタンスを作成します。私は実際に値を設定しています一部の上に立ち往生しています:C#リフレクション、ヌルプロパティの新しいインスタンスを設定する

public static void CheckIfPropertyIsNull<TEntity>(SomeBusinessEntity someBusinessEntity) where TEntity : new() 
    { 
     var properties = typeof(SomeBusinessEntity).GetProperties(); 

     foreach (PropertyInfo propertyInfo in properties) 
     { 
      Type currentType = propertyInfo.PropertyType; 
      if (currentType == typeof(TEntity)) 
      { 
       var propertyData = propertyInfo.GetValue(someBusinessEntity, null); 
       if (propertyData == null) 

       { 
        object instance = Activator.CreateInstance(typeof(TEntity)); 

        // And then? 
        //propertyInfo.SetValue(null, instance); 

        return; 
       } 
      } 
     } 
    } 

私はのSetValue()メソッドを使用しようとしたが運で。

+0

あなたが提供しているタイプにパラメータのないコンストラクタがあるというジェネリックスシステムからの要求に煩わされました。なぜなら、 'Activator.CreateInstance(...)'ではなく 'new TEntity() ? –

+0

私はいくつかの思考プロセスを持ち、コードをちょうど落書きしていました。私は以前に新しいTEntity()を使用していました。 –

答えて

5

SetValueには、プロパティの所有者のインスタンス(someBusinessEntity)が必要です。

object instance = new TEntity(); 

// And then 
propertyInfo.SetValue(someBusinessEntity, instance); 

あなたのロジックは私にとって奇妙に見えます。ジェネリック型を使用してすべてのプロパティを設定しています。なぜプロパティの種類を使用しないでください?

+0

ありがとうございます。できます。 Imはリフレクションにはかなり新しいので、あなたの最後の部分をあまり理解していません。 –

関連する問題