C# - 迭代并调用类成员

Tre*_*vor 4 c# reflection loops class

我正在尝试迭代静态类的成员并调用所有字段成员.我在尝试调用该成员的行上遇到MissingFieldException.

像这样的东西:

"找不到字段'NamespaceStuff.MyClass + MyStaticClass.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;
}
Run Code Online (Sandbox Code Playgroud)

数组"成员"看起来像这样:

 [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}
Run Code Online (Sandbox Code Playgroud)

它在foreach循环中变为索引4时会爆炸('A'确实在那里).

我为InvokeMember()中倒数第二个参数传入null,因为它是一个静态类,并且没有什么适合传入这里.不过,我猜我的问题与此有关.

我正在尝试做什么?也许我完全是错误的方式.另外,如果其中一些BindingsFlags是多余的,请告诉我.

Wal*_*eza 12

如果您知道您只想在课程中使用公共静态字段,那么最好使用以下内容:

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

foreach (FieldInfo field in fields)
{
    var fieldValue = (int)field.GetValue(null);   
}
Run Code Online (Sandbox Code Playgroud)

这将确保只返回正确的成员,并且您可以获取字段值.