Здравствуйте, Sinix, Вы писали:
S>Есть пачка методов, проверяющая выставлен/отсутствует ли флаг у enum'а.
S>Задача — обозвать метод, возвращающий true, если хоть один флагов не выставлен
На правах дилетанта, предлагаю пару вариантов: NotAllFlagsSet и SomeFlag[s]NotSet.
Здравствуйте, Sinix, Вы писали:
S>Есть пачка методов, проверяющая выставлен/отсутствует ли флаг у enum'а.
S>Задача — обозвать метод, возвращающий true, если хоть один флагов не выставлен S>
S>x = (value & flag) != flag
S>
S>Пока назван HasNotAnyFlag по аналогии с методом из коробки HasFlag. Резервный вариант — PartiallyCleared.
А может вывернуться (хотя это больше соответствует интерфейсу тех же перечислений):
bool HasAllFlags(); //возвращает true, если все флаги выставлены
а потом:
if (!HasAllFlags())
{ //соответственно, сюда попадем когда хотя бы один из флагов не выставлен
}
P.S. Мне название HasNotAnyFlag выносит мозг и заставляет каждый раз задумываться над тем, что же оно означает.
Re[2]: [Обозвать] Проверка на очистку любого флага
Здравствуйте, SergeyT., Вы писали:
ST>А может вывернуться (хотя это больше соответствует интерфейсу тех же перечислений):
Ага. Тогда останется только HasFlag и HasAnyFlag. Вариант.
ST>P.S. Мне название HasNotAnyFlag выносит мозг и заставляет каждый раз задумываться над тем, что же оно означает.
+1
Кмк, оно не совсем очевидно будет в использовании. Как оно выглядит сейчас (extension method):
var a = SomeEnum.ValueA | SomeEnum.ValueB.
// ...
// В 4м fw есть Enum.HasValue, увы, довольно тормознутый.
// Если я обзову свой метод иначе - будет 2 метода, делающих одно и то же.if (a.HasFlag(SomeEnum.ValueA))
{
// ...
}
// ...if (a.HasAnyFlag(SomeEnum.ValueA | SomeEnum.ValueC))
{
// ...
}
Пока склоняюсь к варианту SergeyT. — вайпнуть остальные два метода. Грабли: параллельно существует класс с ассертами
var a = SomeEnum.ValueA | SomeEnum.ValueB.
// ...
EnumCode.HasNotAnyFlag(a, SomeEnum.ValueB | SomeEnum.ValueC, "Violation description."); // fails
Re[3]: [Обозвать] Проверка на очистку любого флага
Тогда ещё варианты HasAnyOfFlags(flags), HasNoneOfFlags(flags), HasAllOfFlags(flags)
А то меня как-то корёжит от "has not any flag"
Или же, если некоторые признаки двоичные (вкл-выкл), а некоторые многеричные (выбор из нескольких вариантов), то проверка будет такой
HasFlag(flagmask,flag) = (value&flagmask)==flag
например, HasFlag(alignment,right)
где
enum FormatFlag
{
left = 0, center = 0x1, right = 0x2,
top = 0, vcenter = 0x4, bottom = 0x8,
nobreak = 0, wordbreak = 0x10, hyphens = 0x20,
// и т.п.
};
enum FormatMask
{
alignment = left|center|right,
valignment = top|vcenter|bottom,
breaks = nobreak|wordbreak|hyphens,
// и т.п.
};
Перекуём баги на фичи!
Re[4]: [Обозвать] Проверка на очистку любого флага