¿Como recorrer las propiedades de un objeto dinámicamente? C# .Net

En este video te enseño como es posible recorrer los atributos de un objeto como si fuera un arreglo o una lista, de esta manera puedes crear formularios dinámicos, tablas dinámicas, validadores y muchas cosas más, de manera dinámica.

Código:


 public class Persona
    {
        public string Nombre { get; set; }
        public int Edad { get; set; }
        public decimal Estatura { get; set; }
        public string Apellido { get; set; }

    }
    class Program
    {
        static void Main(string[] args)
        {
            Persona oPersona = new Persona() { Nombre = "Juan",Apellido="De León", Edad = 31, Estatura = 1.80M };

            PropertyInfo[] lst = typeof(Persona).GetProperties();
            foreach (PropertyInfo oProperty in lst)
            {
                string NombreAtributo = oProperty.Name;
               // string Tipo = oProperty.GetType().ToString();
                string Valor = oProperty.GetValue(oPersona).ToString();

                Console.WriteLine("El atributo "+NombreAtributo+" tiene el valor: "+Valor );
            }
        }
    }