BitArray和XOR

sgt*_*gtz 13 .net c#

我正在寻找一种基于运算符的方式来处理位掩码和逐位布尔运算(XOR/NOR/OR/AND/NOT/EQV /等).一般来说,我真的很喜欢扩展方法风格的方法,但在这种情况下,我觉得它有点乱.

有没有更简洁的方法来处理C#中的位?

        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
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 19

没有办法直接使用BitArray- 但你总是可以创建一个包含a的包装类BitArray,并在那里定义自己的运算符.

当然,如果你处理64位或更少,你可以只使用一个longulong完成它...


svi*_*ick 11

没有办法用这个BitArray和有充分理由这样做:操作喜欢OrXor 修改第一个操作数.这不是什么|^通常做什么.

如果需要,可以创建一个包含所需运算符的包装器,包括在执行操作之前复制第一个操作数的值.


ann*_*sly 6

不幸的是,由于扩展类中没有运算符重载(必须在类或结构本身中定义运算符重载),因此没有将这些方法转换为运算符的真正方法.我希望(我相信很多其他人也会这样做)将来会改变,但现在却无法做到这一点.