[c#] 리플렉션을 통해 공개 정적 필드의 값 가져 오기

이것이 내가 지금까지 한 일입니다.

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



답변

당신은 통과해야 nullGetValue이 필드가 인스턴스에 속해 있지 않기 때문에, :

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));


답변

이 시도

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


답변