通过reflection获得公共静态字段的值

这是我迄今为止所做的:

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

这是我的静态类:

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

您需要将null传递给GetValue ,因为此字段不属于任何实例:

 props[0].GetValue(null) 

您需要使用Type.GetField(System.Reflection.BindingFlags)重载:

例如:

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

FieldInfo.GetValue的签名是

 public abstract Object GetValue( Object obj ) 

其中obj是要从中检索值的对象实例,如果是静态类,则为null 。 所以这应该这样做:

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

尝试这个

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