¿Cómo recorrer dinámicamente los atributos de un objeto en C#?

En c# existe una manera fácil para recorrer dinámicamente los atributos de un objeto, de la siguiente manera podemos obtener el valor de un objeto dinámicamente y también el nombre de sus atributos en forma de cadena, para ello haremos uso de la clase PropertyInfo con la cual podemos obtener la estructura de nuestro objeto, abajo comento y pongo un ejemplo simple para entenderlo:

Clase para el ejemplo:


public class Auto
{
            public string Nombre { get; set; }
            public string Marca { get; set; }
            public string Modelo { get; set; }

            public int Año { get; set; }
}

Y para realizar el recorrido de los atributos lo hacemos de la siguiente manera:


Auto oAuto = new Auto() { Nombre = "Mi auto", Marca = "Honda", Modelo = "Civic", Año = 2018 };

PropertyInfo[] properties = typeof(Auto).GetProperties();
foreach (PropertyInfo property in properties)
{
     //así obtenemos el nombre del atributo
     string NombreAtributo=property.Name; 

     //así obtenemos el valor del atributo
     string Valor=property.GetValue(oAuto);
     Console.WriteLine("El atributo "+NombreAtributo+" tiene el valor: "+ Valor);
}

Y el resultado:

El atributo Nombre tiene el valor: Mi auto
El atributo Marca tiene el valor: Honda
El atributo Modelo tiene el valor: Civic
El atributo Año tiene el valor: 2018

Si agregamos nuevos atributos a nuestra clase este algoritmo seguiría recorriendo dinámicamente todas la nuevas propiedades de nuestra clase.

Autor: Héctor de León

Desarrollador de software, lector compulsivo.