Поразрядное вычитание

учитывая перечисление:

[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);

Дайте мне знать, если это будет интересно для вас, и я посмотрю, что я могу сделать в выходные...


и это с дополнением foo.c:

example = example & ~foo.c