通过反射获取公共静态字段的值

时间:2011-05-05 13:22:10

标签: c# .net

这是我到目前为止所做的:

 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";
   }
}

4 个答案:

答案 0 :(得分:134)

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

props[0].GetValue(null)

答案 1 :(得分:14)

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

例如:

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

Settings.Lookup lookup = (Settings.Lookup)field.GetValue(null);

答案 2 :(得分:6)

FieldInfo.GetValue的签名是

public abstract Object GetValue(
    Object obj
)

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

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

答案 3 :(得分:4)

试试这个

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