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)
这将确保只返回正确的成员,并且您可以获取字段值.