2016-07-29 27 views
0

Ich habe eine kleine Methode geschrieben, deren einziger Zweck darin besteht, zu überprüfen, ob eine Eigenschaft für eine bestimmte Klasse null ist. Wenn die Eigenschaft null ist, erstellen Sie eine neue Instanz davon. Ich bin immer auf einen Teil stecken, wo ich eigentlich einen Wert ein:C# Reflektion, Festlegen einer neuen Instanz einer Null-Eigenschaft

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; 
       } 
      } 
     } 
    } 

Ich versuche, die SetValue() -Methode verwendet, aber ohne Glück.

+0

Sie haben sich die Mühe gemacht, vom Generikasystem anzufordern, dass jeder von Ihnen bereitgestellte Typ einen parameterlosen Konstruktor hat - warum also nicht einfach 'new TEntity()' anstatt 'Activator.CreateInstance (...)' ? –

+0

Ich hatte einen Gedankengang und kritzelte nur mit dem Code herum. Ich habe vorher eine neue TEntity() benutzt. –

Antwort

5

In Ihrer SetValue müssen Sie immer noch die Instanz des Besitzers der Eigenschaft geben: someBusinessEntity.

object instance = new TEntity(); 

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

Beachten Sie, dass Ihre Logik mir seltsam erscheint. Sie verwenden einen generischen Typ, um alle Eigenschaften festzulegen. Warum nicht den Typ der Immobilie verwenden?

+0

Danke Patrick. Es klappt. Ich bin ziemlich neu in der Reflexion und verstehe deinen letzten Teil nicht ganz. –