2016-09-10 5 views
1

Ich muss rekursiv alle DateTime Eigenschaften eines Objekts erhalten.Wie rekursiv Eigenschaften eines Typs mit Reflektion erhalten?

Derzeit mache ich:

public static void GetDates(this object value) 
{ 
    var properties = value.GetType().GetProperties(); 

    foreach (var property in properties) 
    { 
     if (property.GetType().IsClass) 
     { 
      property.SetDatesToUtc(); 
     } 
     else 
     { 
      if (property.GetType() == typeof(DateTime)) 
      { 
       //Do something... 
      } 
     } 
    } 
} 

jedoch property.GetType().IsClass verwendet, ist nicht genug, um als auch Strings oder Datum Eigenschaften Klassen sind.

Gibt es eine Möglichkeit, Eigenschaften zu erhalten, die tatsächliche Klassen sind?

Wäre es besser, wenn ich den Klassen, die DateTime Eigenschaften haben, eine Schnittstelle hinzufügen und dann überprüfen, ob diese Eigenschaft diese Schnittstelle implementiert?

+0

Was ist der Zweck der ersten if-Anweisung? –

+0

@ MathiasR.Jessen Die erste 'if'-Anweisung testet, ob die Eigenschaft ein Referenztyp ist. –

Antwort

0

Ich habe eine Schnittstelle zu den Klassen hinzugefügt, die eine DateTime-Eigenschaft haben. So ändert sich die Methode zu:

+0

Während dies funktioniert, würde ich vorschlagen, dass Sie ein Attribut für die Klasse verwenden, anstatt eine Schnittstelle hinzuzufügen, die keine Methoden oder Eigenschaften bereitstellt. – pquest

1

Sie sind auf dem richtigen Weg, aber ich denke, Ihre Logik ist ein wenig umgekehrt. Sie sollten Datumsangaben ändern und dieselbe Methode für alle anderen Anwendungen ausführen:

public static void GetDates(this object value) 
{ 
    if(value == null) //if this object is null, you need to stop 
    { 
     return; 
    } 
    var properties = value.GetType().GetProperties(); 
    foreach(PropertyInfo property in properties) 
    { 
     //if the property is a datetime, do your conversion 
     if(property.GetType() == typeof(DateTime)) 
     { 
      //do your conversion here 
     } 
     //otherwise get the value of the property and run the same logic on it 
     else 
     { 
      property.GetValue(value).GetDates(); // here is your recursion 
     } 
    } 
} 
Verwandte Themen