none
obtener el valor de un campo de una lista cuyo nombre esta en una variable string RRS feed

  • Pregunta

  • Hola

    necesito obtener el valor de un campo de una lista cuyo nombre esta en una variable string

    mi código genera un valor aleatorio con el nombre de un campo de la lista

    tengo una lista con campos desde a1, a2, a3, a4, ..... hasta a50

    y tengo un string que se genera aleatoriamente con uno de estos campos.

    por ejemplo si el proceso aleatorio ha asignado al sting campo el valor "a12"

    string campo = "a12"

    necesito el contenido de ese campo, asumiendo que el valor "a12" puede ser cualquier valor de los campos, pero que siempre lo tengo en el string campo.

    Gracias

    jueves, 1 de junio de 2017 21:18

Respuestas

  • No, el valor aleatorio debe corresponder a un nombre de propiedad, evita el nombre de la clase. También ten en cuenta que el método GetType() obtiene el tipo de la instancia actual, no de la clase. Fíjate una vez mas en el ejemplo:

    //Clase
    private class g
    {
    	public int b1 { get; set; }
    	public int b2 { get; set; }
    	public int b3 { get; set; }
    }
    
    
    //Code
    g _g = new g() { b1 = 1, b2 = 35, b3 = 3 };
    
    string coorde1 = "b2"; //Valor aleatorio
    string valor = _g.GetType().GetProperty(coorde1).GetValue(_g, null).ToString();


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 2 de junio de 2017 13:58
  • ¿Lista o clase?, imagino que por campos te refieres a propiedades. Si es una instancia de una clase puedes usar Reflection para acceder a una de las propiedades mediante el nombre, por ejemplo:

    - Clase

    private class ClassA
    {
    	public int a1 { get; set; }
    	public int a2 { get; set; }
    	public int a3 { get; set; }
    }

    - Obtener el valor de "x" propiedad

    ClassA clase = new ClassA() { a1 = 1, a2 = 2, a3 = 3 };
    
    string nombrePropiedad = "a2";
    string valor = clase.GetType().GetProperty(nombrePropiedad).GetValue(clase, null).ToString();
    
    //Resultado: 2


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 1 de junio de 2017 22:02

Todas las respuestas

  • ¿Lista o clase?, imagino que por campos te refieres a propiedades. Si es una instancia de una clase puedes usar Reflection para acceder a una de las propiedades mediante el nombre, por ejemplo:

    - Clase

    private class ClassA
    {
    	public int a1 { get; set; }
    	public int a2 { get; set; }
    	public int a3 { get; set; }
    }

    - Obtener el valor de "x" propiedad

    ClassA clase = new ClassA() { a1 = 1, a2 = 2, a3 = 3 };
    
    string nombrePropiedad = "a2";
    string valor = clase.GetType().GetProperty(nombrePropiedad).GetValue(clase, null).ToString();
    
    //Resultado: 2


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    jueves, 1 de junio de 2017 22:02
  • me entrega un resultado null

    mi clase se llama g

    el valor aleatorio que me arrojó en el string coorde1 es igual a "g.b2"

    si consulto g.b2, me entrega el valor que contiene ese campo que es "35"

    pero al hacer la consulta según me indicas

    g.GetType().GetProperty(coorde1).GetValue(g, null).ToString();

    me dice que el valor es null

    viernes, 2 de junio de 2017 13:01
  • No, el valor aleatorio debe corresponder a un nombre de propiedad, evita el nombre de la clase. También ten en cuenta que el método GetType() obtiene el tipo de la instancia actual, no de la clase. Fíjate una vez mas en el ejemplo:

    //Clase
    private class g
    {
    	public int b1 { get; set; }
    	public int b2 { get; set; }
    	public int b3 { get; set; }
    }
    
    
    //Code
    g _g = new g() { b1 = 1, b2 = 35, b3 = 3 };
    
    string coorde1 = "b2"; //Valor aleatorio
    string valor = _g.GetType().GetProperty(coorde1).GetValue(_g, null).ToString();


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 2 de junio de 2017 13:58
  • perfecto, ahí si me funcionó.

    ni siquiera tuve que crear la segunda clase _g

    sólo hice lo que indicaste, es decir, que mi variable coorde1, sea:

    string coorde1 = "b2";

    con eso puedo hacer la consulta directamente

    string value = g.GetType().GetProperty(coorde1).GetValue(g, null).ToString();

    muchas gracias.

    viernes, 2 de junio de 2017 14:19