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

Esto es lo que he hecho hasta ahora:

var props = typeof (Settings.Lookup).GetFields(); Console.WriteLine(props[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"; } } 

GetValue pasar null a GetValue , ya que este campo no pertenece a ninguna instancia:

 props[0].GetValue(null) 

Necesitas usar la sobrecarga de Type.GetField (System.Reflection.BindingFlags):

Por ejemplo:

 FieldInfo field = typeof(Settings.Lookup).GetField("Lookup", BindingFlags.Public | BindingFlags.Static); Settings.Lookup lookup = (Settings.Lookup)field.GetValue(null); 

La firma de FieldInfo.GetValue es

 public abstract Object GetValue( Object obj ) 

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

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

Prueba esto

 FieldInfo fieldInfo = typeof(Settings.Lookup).GetFields(BindingFlags.Static | BindingFlags.Public)[0]; object value = fieldInfo.GetValue(null); // value = "abc"