Перечисления флагов без степени двойки

В документации MSDN для атрибута Flag говорится, что вам следует:

Определить константы перечисления в степени двойки, то есть , 1, 2, 4, 8, и так далее. Это означает, что отдельные флаги в комбинированном перечислении константы не перекрываются.

... и, конечно, я всегда стараюсь не забывать об этом. Однако ничто не обеспечивает этого, и если вы просто создадите перечисление «базовым» способом, например ...

[Flags]
public enum BrokenEnum
{
    None,
    FirstOption,
    SecondOption,
    ThirdOption
}

... оно будет вести себя не так, как ожидалось. Чтобы бороться с этим, я ищу своего рода статический анализ кода (например, FxCop ), который может предупредить меня, когда в моем коде есть перечисление, подобное приведенному выше. Ближайшее подобное предупреждение, которое я смог найти, было « CA1008: Enums должны иметь нулевое значение » - что также полезно для правильного проектирования перечисления флагов, но этого недостаточно.

Каков наилучший способ найти неправильные значения. разработанные флаги перечисления в моем коде? Чем более автоматизировано решение, тем лучше.

6
задан Stephen McDaniel 20 August 2011 в 05:48
поделиться