2011-11-02 20 views
7

Quiero establecer todas las propiedades DateTime de mi objeto a una fecha predeterminada. Sin embargo, si intento establecer los valores a través de la reflexión obtengo la excepción: "El objeto no coincide con el tipo de destino".C# Objeto de configuración Valores de propiedad DateTime a través de la reflexión

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

¿Estoy haciendo/pensando en algo fundamentalmente incorrecto?

+0

¿Cuál es la razón para configurar estos mediante la reflexión en lugar de directamente? Si tiene una tonelada que necesita establecerse, podría considerar ponerlos en una lista o un diccionario. –

+0

¿Alguna razón para evitar las propiedades estándar con un getter que devuelve una clase var con su fecha predeterminada? –

+0

He intentado hacer una funcionalidad similar en una pesadilla de herencia multinivel implementando un método de deserialización personalizado basado en la reflexión. ¡El rendimiento es terrible! Es mejor utilizar clases parciales y escribir un generador de código. (mi $ 0.02). –

Respuesta

9

Los parámetros necesitan ajustes; el primero es el objetivo - que supongo que es this aquí; el segundo es el valor (dt). El último se refiere a "indexadores", que probablemente no se aplique aquí.

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

funciona - me encanta, gracias! :-) – Mike

Cuestiones relacionadas