这个帖子讨论了属性,但是我试图在以下静态类中获得常数:
public static class SpYtMessageConstants
{
public const int MSG_NOOP = 1;
public const int MSG_PING = 2;
}
我想循环遍历所有常数并获取每个值值。这是用于单位测试以确保没有人添加相同值两次。
我们想要static
(和public
) fields'(不是属性)值,该值只能在编译时间设置(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
是多余的,但是,如果类是 senasented :
public class BaseClass {
public const int BaseConst = 123;
}
public class DerivedClass : BaseClass {
public const int DerivedConst = 456;
}
如果BindingFlags.FlattenHierarchy
指定 BaseConst
和 DerivedConst
均已返回