2010-08-16 4 views
4

정적 클래스의 멤버를 반복하고 필드 인 모든 멤버를 호출하려고합니다. 멤버를 호출하려고 시도하는 라인에서 MissingFieldException이 발생합니다. 이 같은C# - 반복 및 클래스 멤버 호출

뭔가 :

". 필드 'NamespaceStuff.MyClass + MyStaticClass.A'을 (를) 찾을 수 없습니다" 그것은 foreach 루프에서 인덱스 4에 도달 할 때이 불면

[0]|{System.String ToString()} 
[1]|{Boolean Equals(System.Object)} 
[2]|{Int32 GetHashCode()} 
[3]|{System.Type GetType()} 
[4]|{Int32 A} 
[5]|{Int32 B} 
[6]|{Int32 C} 

('A'는 정말 거기에있다) :

public class MyClass { 
    public MyClass() { 
     Type type = typeof(MyStaticClass); 
     MemberInfo[] members = type.GetMembers(); 

     foreach(MemberInfo member in members) { 
      if (member.MemberType.ToString() == "Field") 
      { 
       // Error on this line 
       int integer = type.InvokeMember(member.Name, 
              BindingFlags.DeclaredOnly | 
              BindingFlags.Public | 
              BindingFlags.Instance | 
              BindingFlags.GetField, 
              null, null, null); 
      } 
     } 
    } 
} 

public static class MyStaticClass 
{ 
    public static readonly int A = 1; 
    public static readonly int B = 2; 
    public static readonly int C = 3; 
} 

배열 "회원"이 같이 보입니다.

정적 클래스이기 때문에 InvokeMember()의 두 번째 - 마지막 매개 변수에 null을 전달했으며 여기에 전달할 적절한 것은 없습니다. 나는 내 문제가 이것과 관련이 있다고 생각한다.

내가 할 수있는 일이 가능합니까? 어쩌면 나는 완전히 잘못된 방향으로 가고 있을지도 모른다. 또한이 BindingsFlags 중 일부가 불필요한 경우 알려 주시기 바랍니다.

답변

12

은 그때는 아마 사용하는 것이 더 낫다 다음

Type type = typeof (MyStaticClass); 
var fields = type.GetFields(BindingFlags.Static | BindingFlags.Public); 

foreach (FieldInfo field in fields) 
{ 
    var fieldValue = (int)field.GetValue(null); 
} 

에만 올바른 구성원이 반환되는 것을 보장하고 당신이 얻을 수 필드 값.

+0

lo.l 너도 나를 이길거야 –

+0

완벽! 고마워, 고마워. 이해하기가 훨씬 쉽다. 나는 아직도 내 머리를 감싸고있다. – Trevor

3

Astatic이지만 InvokeMember으로 전화 하시려면 BindingFlags.Instance을 사용하고 있습니다. 당신은 클래스에 공공 정적 필드 원하는 알고 있다면

관련 문제