На практике одно из применений, которые я использую, - это указание нескольких статусов. Это упрощение некоторого кода, оценивающего результаты тестирования. Тест может быть удовлетворительным, или у него может быть несколько причин, по которым он не прошел. Преимущество, которое это дает, состоит в том, что у меня есть один метод, который оценивает "правильность" тестов, и этот метод может указать все возможные условия отказа одним возвратом. Может быть, это не лучший дизайн, но в данном случае он работает.
[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
, но я просто убеждаюсь, что это не тот случай, когда я использую перечисление.
person
Tim Coker
schedule
05.05.2011