Obtenga valor de un campo estático público a través de la reflexión


85

Esto es lo que he hecho hasta ahora:

 var fields = typeof (Settings.Lookup).GetFields();
 Console.WriteLine(fields[0].GetValue(Settings.Lookup)); 
         // Compile error, Class Name is not valid at this point

Y esta es mi clase estática:

public static class Settings
{
   public static class Lookup
   {
      public static string F1 ="abc";
   }
}

10
Solo una nota de que llamar a la variable en propslugar de fieldspuede confundir a un futuro desarrollador. Las propiedades son sus propias cosas y los campos definitivamente no lo son.
ErikE

Respuestas:




7

La firma de FieldInfo.GetValuees

public abstract Object GetValue(
    Object obj
)

donde objes la instancia de objeto de la que desea recuperar el valor o nullsi es una clase estática. Entonces esto debería hacer:

var props = typeof (Settings.Lookup).GetFields();
Console.WriteLine(props[0].GetValue(null)); 

1
No confíe en los nombres de variables ... el OP está llamando a GetFields, no a GetProperties;)
Thomas Levesque

@ PauliØsterø ¿a qué nullcorresponde el segundo ? ¿No FieldInfo.GetValueacepta solo un único parámetro? Parece que no puedo encontrar sobrecargas GetValueni nada
Thomas Flinkow

@ThomasFlinkow mero error tipográfico, está arreglado ahora
Pauli Østerø

@ PauliØsterø pensó que sí :) solo quería asegurarse de que el código de la pregunta esté listo para copiar y pegar. Entonces +1 para una buena respuesta.
Thomas Flinkow

4

Prueba esto

FieldInfo fieldInfo = typeof(Settings.Lookup).GetFields(BindingFlags.Static | BindingFlags.Public)[0];
    object value = fieldInfo.GetValue(null); // value = "abc"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.