Skip to content

Reflection para obtener las Propiedades y valores de un objeto

by en 9 junio, 2011

Si alguna vez tienen una clase y tienen que recorrer sus propiedades una por una, en vez de empezar a enumerar una a una las propiedades les recomiendo esto:

 

Para recorrer cada una de las propiedades de una clase y obtener su nombre:

Type t =  this.GetType();
System.Reflection.PropertyInfo[] properties = t.GetProperties();

foreach (System.Reflection.PropertyInfo p in properties)
{
    c = new System.Web.UI.WebControls.TableHeaderCell();
    c.Text = p.Name;
    r.Cells.Add(c);
}

En este caso estoy agregando cada una de las propiedades de una clase a las celdas de las filas de una tabla. (La idea es crear las cabeceras de la tabla)

Luego para construir el cuerpo de la tabla es un poco más avanzado:

Type t = this.GetType();
System.Reflection.PropertyInfo[] properties = t.GetProperties();

foreach (System.Reflection.PropertyInfo p in properties)
{
    c = new System.Web.UI.WebControls.TableHeaderCell();
    object PropertyValue = p.GetValue(this, null);

    if (PropertyValue is string)
    {
        c.Text = (string)PropertyValue;
    }
    else if (PropertyValue is int)
    {
        c.Text = ((int)PropertyValue).ToString();
    }
    else if (PropertyValue is double)
    { 
        c.Text = ((double)PropertyValue).ToString("C0");
    }
    else if (PropertyValue is DateTime)
    {
        c.Text = ((DateTime)PropertyValue).ToString();
    }
    else if (PropertyValue is short)
    {
        c.Text = ((short)PropertyValue).ToString();
    }
    else if (PropertyValue is byte)
    {
        c.Text = ((byte)PropertyValue).ToString();
    }
    else if (PropertyValue is bool)
    {
        c.Text = ((bool)PropertyValue) ? "SI" : "NO";
    }
    else if (PropertyValue == null)
    {
        c.Text = string.Empty;
    }
    else
    {
        c.Text = "FALTA DEFINIR ESTE TIPO DE DATO";
    }
    r.Cells.Add(c);
}

Aquí debe ir cada tipo de datos que tiene ese objeto. Si no lo sabes, puedes intentar .ToString(), aunque no sé si sirve😛

 

 

From → C#

4 comentarios
  1. remmi permalink

    la variable _ r_ de donde la declaraste ?
    si me pudieras orientar, estoy intentando obtener el valor de un object pero nadamas llego al indice

    {string[1]} — donde este ya contiene el valor en si pero ya no puedo acceder a el.

  2. Hola remmi. Tienes razón en preguntar de dónde saco la variable “r”. La verdad es que olvidé copiar esa línea.

    r es un TableRow incializado de la siguiente manera:

    TableRow r = new TableRow();

    Disculpa, no entiendo tu problema. ¿Podrías ser más específico?

  3. y para una clase creado por uno ??
    public class empresa
    {
    private string empresa_id = null;
    public string Empresa_id
    {
    get { return empresa_id; }
    set { empresa_id=value; }
    }

    private string nombreEmp = null;
    public string NombreEmp
    {
    get { return nombreEmp; }
    set { nombreEmp = value; }
    }

    private string direccionEmp;
    public string DireccionEmp
    {
    get { return direccionEmp; }
    set { direccionEmp = value; }
    }

    private string telefEmp;
    public string TelefEmp
    {
    get { return telefEmp; }
    set { telefEmp = value; }
    }

    private string pais;
    public string Pais
    {
    get { return pais; }
    set { pais = value; }
    }
    }

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: