В документации MSDN для атрибута Flag
говорится, что вам следует:
Определить константы перечисления в степени двойки, то есть , 1, 2, 4, 8, и так далее. Это означает, что отдельные флаги в комбинированном перечислении константы не перекрываются.
... и, конечно, я всегда стараюсь не забывать об этом. Однако ничто не обеспечивает этого, и если вы просто создадите перечисление «базовым» способом, например ...
[Flags]
public enum BrokenEnum
{
None,
FirstOption,
SecondOption,
ThirdOption
}
... оно будет вести себя не так, как ожидалось. Чтобы бороться с этим, я ищу своего рода статический анализ кода (например, FxCop ), который может предупредить меня, когда в моем коде есть перечисление, подобное приведенному выше. Ближайшее подобное предупреждение, которое я смог найти, было « CA1008: Enums должны иметь нулевое значение » - что также полезно для правильного проектирования перечисления флагов, но этого недостаточно.
Каков наилучший способ найти неправильные значения. разработанные флаги перечисления в моем коде? Чем более автоматизировано решение, тем лучше.