none
Convertir un string a class. RRS feed

  • Pregunta

  • Tengo esta linea de codigo que es una clase estatica:

             int valor_1 = Resource.Drawable.pin;

             int valor_2 = Resource.Drawable.info;

    el cual me devuelve un entero. Lo que necesito es que "pin", "info" sea una variable de tipo string.

    public int Pin (string pin){

        string cadena = "Resource.Drawable." + pin;

        int valor = // convertir el string a clase para que pueda devolverme el entero 

        return valor;

    }

    Se que puedo almacenar dichos valores en una variable para despues usarlo pero en mi situacion, veo conveniente hacerlo de esta manera aunque no se si sea posible e hice un ejemplo sencillo.

    martes, 21 de enero de 2020 23:12

Respuestas

Todas las respuestas

  • hola

    La unica forma de poder ejecutar codigo dinamico que pudieras tener en un string es por medio de las librerias de Reflection

    Reflexión (C#)

    evalua la tecnica del link en donde conociendo el Assembly puede usar el ResourceManager para acceder a la key del resx

     Using reflection to access a resource dictionary

     Recorrer Archivo de Recurso y pasarlo a una Lista

    tambien podrias ver si aplica el Assembly.GetExecutingAssembly() asi es mas simple de acceder a los recursos del mismo assembly que contiene el resource

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Propuesto como respuesta Diana AcuñaModerator miércoles, 22 de enero de 2020 15:39
    • Marcado como respuesta iiFranz lunes, 3 de febrero de 2020 16:47
    miércoles, 22 de enero de 2020 0:20
  • Ejemplo usando Reflection:

    // int valor_1 = Resource.Drawable.pin;
    using System.Reflection;
    // ...
    string propiedad="pin";
    Type t = typeof(Resource.Drawable);
    PropertyInfo pi = t.GetProperty(propiedad, BindingFlags.Static | BindingFlags.Public);
    // Aquí conviene verificar que pi no sea null, cosa que indicaría que la propiedad no existe
    int valor_1 = (int)pi.GetValue(null);

    Ojo, aquí he presumido que la propiedad es estática dentro de Resource.Drawable y que Resource.Drawable es un nombre de clase (no una variable que contiene la instancia de la clase). Si no fuera así, hay que cambiar los BindingFlags y pasar en el GetValue la instancia deseada en lugar de null, y poner en el typeof el nombre de la clase (no el de la instancia).

    miércoles, 22 de enero de 2020 7:48
    Moderador