Hace algún tiempo me encontre con la necesidad de leer todos los valores de los atributos de un tipo de dato proporcionado por un tercero y validar si todos tenian algo de data o estaban en null aparentemente esto no plantea ningun problema me valdria la siguiente instrucción para leer cada atributo de clase:
object valor = tipo.atributo;
una vez hecho esto para cada atributo validar si era o no nulo y en dependencia de esto ejecutar alguna acción, bueno hasta ahi todo estaba bien hasta que me di cuenta que el tercero a futuro podría agregar nuevos atributos al tipo, es decir que tendría que leer de forma dinamica los atributos, es aquí donde aparece la magia de reflection, esta clase nos permite leer las entrañas de cualquier tipo de dato de forma dinamica e incluso crear instancias de forma dinamica, en fin el siguiente código me permitio iterar sobre los atributos del tipo sin conocer cuantos ni cuales eran los nombres de los mismos.
//Obteniendo el objeto a leer desde un metodo
FundSig sigFunds = this.GetSigFunds(strProduct, strIdFund);
//Obteniendo todas las propiedades del tipo del objeto obtenido en la linea anterior
PropertyInfo[] properties = sigFunds.GetType().GetProperties();
//Iterando sobre las propiedades obtenidas
foreach (PropertyInfo info in properties)
{
//Obteniendo el valor de cada atributo en el objeto obtenido en el primer punto
if (sigFunds.GetType().GetProperty(info.Name).GetValue(sigFunds, null) == null)
{
return false;
}
}
Esto es solo una pequeña aplicación de lo que se puede hacer con reflection, espero les sea de ayuda !
No hay comentarios:
Publicar un comentario