Я пытаюсь перебрать членов статического класса и вызвать все члены, являющиеся полями. Я получаю исключение 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;
}
Массив "members" выглядит примерно так:
[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}
Он взрывается, когда попадает в индекс 4 в цикле foreach (там действительно есть «A»).
Я передал значение null для второго по значению параметра в InvokeMember (), потому что это статический класс, и здесь нет ничего подходящего для передачи. Я полагаю, что моя проблема связана с этим.
Возможно ли то, что я пытаюсь сделать? Может быть, я поступаю совершенно неправильно. Также, пожалуйста, дайте мне знать, если некоторые из этих BindingsFlags являются лишними.