在静态类中遍历公共常量

时间:2019-03-06 11:00:15

标签: c# reflection

SO帖子讨论了属性,但是我试图了解以下静态类中的常量:

public static class SpYtMessageConstants
{
    public const int MSG_NOOP = 1;
    public const int MSG_PING = 2;
}

我想遍历所有常量并获取每个值的值。这是为了进行单元测试,以确保没有人两次添加相同的值。

1 个答案:

答案 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 BaseConstDerivedConst