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


90

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

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

10
props대신 변수를 호출하면 fields미래의 개발자를 혼란스럽게 할 수 있습니다. 속성은 자신의 것이며 필드는 분명히 그렇지 않습니다.
ErikE

답변:




7

의 서명 FieldInfo.GetValue

public abstract Object GetValue(
    Object obj
)

obj값을 검색하려는 객체 인스턴스 또는 null정적 클래스 인 경우 어디에 있습니까 ? 따라서 이렇게해야합니다.

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

1
변수 이름을 신뢰하지 마십시오. OP는 GetProperties가 아닌 GetFields를 호출합니다.)
Thomas Levesque

@ PauliØsterø 두 번째는 무엇에 null해당합니까? FieldInfo.GetValue단일 매개 변수 만 허용 하지 않습니까? 나는의 오버로드를 찾을 수 없습니다 GetValue또는 아무것도
토마스 Flinkow

단순한 오타를 @ThomasFlinkow, 자사가 수정
파울리 Østerø

@ PauliØsterø는 그렇게 생각했습니다. :) 질문의 코드가 복사-붙여 넣기가 준비되었는지 확인하고 싶었습니다. 좋은 답변을 원하시면 +1하세요.
Thomas Flinkow

4

이 시도

FieldInfo fieldInfo = typeof(Settings.Lookup).GetFields(BindingFlags.Static | BindingFlags.Public)[0];
    object value = fieldInfo.GetValue(null); // value = "abc"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.