Поразрядное вычитание
учитывая перечисление:
[Flags]
enum foo
{
a = 1,
b = 2,
c = 4
}
затем
foo example = a | b;
если я не знаю, содержит ли foo c
, ранее я писал следующее
if (example & foo.c == foo.c)
example = example ^ foo.c;
есть ли способ сделать это, не проверяя наличие foo.c
на example
?
как и когда дело доходит до дополнений, я могу просто сделать OR
, и если значение перечисления уже существует в example
тогда это не имеет значения.
2 ответов
Я думаю, что вы хотите:
example &= ~foo.c;
другими словами, выполните побитовую " и " маску с каждым битом set за исключением для c
.
EDIT: я должен добавить "Кроме" в Непринужденная Мелодия в какой-то момент, чтобы вы могли написать:
example = example.Except(foo.c);
Дайте мне знать, если это будет интересно для вас, и я посмотрю, что я могу сделать в выходные...