На практике одно из применений, которые я использую, - это указание нескольких статусов.Это упрощение некоторого кода, который оценивает результаты теста.Тест может быть в порядке, или он может иметь несколько причин, чтобы не быть в порядке.Преимущество, которое это дает, состоит в том, что у меня есть один метод, который оценивает тесты «Ok-ness», и этот метод способен указывать все возможные условия отказа с одним возвратом.Возможно, это не лучший дизайн, но в этом случае он работает.
[Flags]
public enum ResultStatusEnum
{
Ok = 0x1,
SampleInvalid = 0x2,
DirectionInvalid = 0x4,
TestIsNotValid = 0x8
}
Вы устанавливаете его так:
ResultStatusEnum res = ResultStatusEnum.SampleInvalid | ResultStatusEnum.DirectionInvalid;
Недостатком является то, что проверка значений перечисления становится громоздкой,Это не будет (обязательно) работать:
res == ResultStatusEnum.Ok
Вы должны сделать это, чтобы проверить:
ResultStatusEnum.SampleInvalid == (res & ResultStatusEnum.SampleInvalid)
В этом случае нелогично иметь ResultStatusEnum.Ok & ResultStatusEnum.SampleInvalid
, но я простоубедитесь, что это не тот случай, когда я использую перечисление.