Подтвердить что ты не робот

BitArray и XOR

Я ищу оператор, основанный на работе с битовыми масками и побитовыми логическими операциями (XOR/NOR/OR/AND/NOT/EQV/etc). Вообще-то мне очень нравится стиль стиля метода расширения, но в этом случае я нахожу его немного грязным.

Есть ли способ взаимодействия с битами в С#?

        BitArray a = new BitArray(0x001);
        BitArray b = new BitArray(0x100);
        BitArray c = new BitArray(0x010);

        BitArray test = a | b;   // won't compile
        BitArray test2 = a ^ c;  // won't compile

        BitArray test3 = a.Or(b);   // compiles
        BitArray test4 = a.Xor(c);  // compiles
4b9b3361

Ответ 1

Нет никакого способа сделать это непосредственно с BitArray - но вы всегда можете создать класс-оболочку, содержащий BitArray, и определить там свои собственные операторы.

Конечно, если вы имеете дело с 64 бит или меньше, вы можете просто использовать long или ulong и сделать с ним...

Ответ 2

Нет способа сделать это с помощью BitArray и по уважительной причине: операции типа Or или Xor изменить первый операнд. Это не то, что обычно | или ^.

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

Ответ 3

К сожалению, поскольку в классах расширения нет перегрузки оператора (перегрузка оператора должна быть определена в самом классе или структуре), нет реального способа перевода этих методов в операторы. Я надеюсь (как я уверен, многие другие тоже делают), что это будет изменено в будущем, но пока нет способа сделать это.