2010-09-16 17 views
73

Quiero analizar dinámicamente un árbol de objetos para hacer algunas validaciones personalizadas. La validación no es importante como tal, pero quiero entender mejor la clase PropertyInfo.Uso de PropertyInfo para encontrar el tipo de propiedad

Voy a hacer algo como esto,

public bool ValidateData(object data) 
{ 
    foreach (PropertyInfo propertyInfo in data.GetType().GetProperties()) 
    { 
     if (the property is a string) 
     { 
      string value = propertyInfo.GetValue(data, null); 

      if value is not OK 
      { 
       return false; 
      } 
     } 
    }    

    return true; 
} 

realmente la única parte que me importa en este momento es 'si la propiedad es una cadena'. ¿Cómo puedo averiguar de un objeto PropertyInfo de qué tipo es?

Tendré que ocuparme de cosas básicas como cadenas, ints, dobles. Pero también tendré que ocuparme de los objetos, y si es así tendré que atravesar el árbol de objetos más abajo dentro de esos objetos para validar los datos básicos dentro de ellos, también tendrán cadenas, etc.

Gracias.

Respuesta

140

Usa PropertyInfo.PropertyType para obtener el tipo de propiedad.

public bool ValidateData(object data) 
{ 
    foreach (PropertyInfo propertyInfo in data.GetType().GetProperties()) 
    { 
     if (propertyInfo.PropertyType == typeof(string)) 
     { 
      string value = propertyInfo.GetValue(data, null); 

      if value is not OK 
      { 
       return false; 
      } 
     } 
    }    

    return true; 
} 
+0

Genial. Voy a intentar esto. ¿Es typeof (string) y typeof (String) equivalente? ¿Lo anterior con tanto una cadena como una cadena? – peter

+2

OK, escribí algunas pruebas unitarias y funciona de maravilla. De hecho, trata a Cadena y Cadena de la misma manera. Lo esperaba, pero solo quería asegurarme. – peter

+2

@peter Sí, 'string' y' String' son iguales. 'string' es un alias para' String'. – bump

Cuestiones relacionadas