此SO帖子讨论了属性,但是我试图了解以下静态类中的常量:
public static class SpYtMessageConstants
{
public const int MSG_NOOP = 1;
public const int MSG_PING = 2;
}
我想遍历所有常量并获取每个值的值。这是为了进行单元测试,以确保没有人两次添加相同的值。
答案 0 :(得分:1)
我们需要static
(和public
)字段的(非属性)值,这些值只能在编译时设置(IsLiteral
),而不能在编译时设置readonly
-IsInitOnly
Object[] values = typeof(SpYtMessageConstants)
.GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy)
.Where(f => f.IsLiteral && !f.IsInitOnly)
.Select(f => f.GetValue(null))
.ToArray();
最后,在您的特定情况下,BindingFlags.FlattenHierarchy
是多余的,但是,在继承了 的类中,它很有用:
public class BaseClass {
public const int BaseConst = 123;
}
public class DerivedClass : BaseClass {
public const int DerivedConst = 456;
}
如果同时指定了BindingFlags.FlattenHierarchy
BaseConst
和DerivedConst