2011-11-02 18 views
7

Desidero impostare tutte le proprietà DateTime del mio oggetto su una data predefinita. Tuttavia, se provo a impostare i valori tramite reflection, ottengo l'eccezione: "L'oggetto non corrisponde al tipo di target".C# Impostazione dell'oggetto Valori delle proprietà DateTime tramite riflessione

private void SetDefaultValues() 
{ 
    DateTime dt = DateTime.Parse("1/1/2000", new CultureInfo("en-US", true)); 
    foreach (PropertyInfo p in this.GetType().GetProperties()) 
    { 
     if (p.PropertyType.FullName == "System.DateTime") 
     {          
      p.SetValue(dt, typeof(DateTime), null); 
     } 
    } 
} 

Sto facendo/pensando qualcosa di fondamentalmente scorretto?

+0

Qual è il motivo per impostare questi attraverso il riflesso anziché direttamente? Se hai una tonnellata che devi impostare, potresti prendere in considerazione la possibilità di inserirli in una lista o in un dizionario. –

+0

Qualsiasi motivo per evitare le proprietà standard con un getter che restituisce una classe var con la data predefinita? –

+0

Ho provato a fare funzionalità simili in un incubo di ereditarietà multi-livello implementando un metodo di deserializzazione personalizzato basato sulla riflessione. Lo spettacolo è terribile! Stai meglio usando classi parziali e scrivendo un generatore di codice. (il mio $ 0,02). –

risposta

9

I parametri devono essere regolati; il primo è l'obiettivo - che presumo sia this qui; il secondo è il valore (dt). L'ultimo si riferisce a "indicizzatori" - che probabilmente non si applicano qui.

p.SetValue(this, dt, null); 
+0

funziona - lo adoro, grazie! :-) – Mike

Problemi correlati