通过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"