通过静态类中的公共常数循环



这个帖子讨论了属性,但是我试图在以下静态类中获得常数:

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指定 BaseConstDerivedConst均已返回

最新更新