я получил следующее заявлениеНастройка всех значений флага перечисления за исключением одного поля
private uint mask;
Action<FlagEnum> setField = new Action<FlagEnum>(x => this.mask = (uint)x);
и следующее перечисление, например:
[Flags]
public enum FlagEnum : uint
{
Clear = 0x0,
F1 = 0x1,
F2 = F1 << 1,
F3 = F2 << 1,
F4 = F3 << 1,
F5 = F4 << 1,
F6 = F5 << 1
}
Теперь я хочу, чтобы установить все флажки, кроме флага «Очистить». Я попытался это:
setField(!FlagEnum.Clear);
Но я получаю следующее сообщение
Operator '!' cannot be applied to perand of type 'BitMask.FlagEnum'
Установка флага, например:
setField(FlagEnum.F1)
работает отлично.
Итак, вопрос в том, как я могу установить все поля FlagEnum вместо «Clear» с моим подходом? Или это невозможно, и я должен выполнить это требование.
Спасибо за этот раунд. Пока что моя реализация работает хорошо. У меня есть операция OR, AND & XOR. Теперь, что нужно делать, 'setField (! FlagEnum.Clear);' должен просто установить все биты от 0 до 1 и оставить 1 неизменным. Как метод под названием 'FillField()' ** bold ** okay, я нашел его: 'this.mask = ~ (uint) FlagEnum.Clear'did трюк –
@DanielW.: Лично я бы подумал о добавлении в константу 'enum 'еще одной константы, которая явно указала бы, что все определенные значения будут более чистыми, но, конечно, для этого требуется еще несколько строк кодирования. В любом случае, пожалуйста, выберите ответ как выбранный, если он вам помог, или, иначе, не стесняйтесь спрашивать дальше. –