我正在寻找一种基于运算符的方法来处理位掩码和按位布尔运算(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
答案 0 :(得分:20)
没有办法直接使用BitArray
- 但你总是可以创建一个包含BitArray
的包装类,并在那里定义你自己的运算符。
当然,如果你处理64位或更少,你可以使用long
或ulong
并完成它...
答案 1 :(得分:12)
无法使用BitArray
执行此操作并且有充分的理由:Or
或Xor
等操作会修改第一个操作数。这不是|
或^
通常所做的事情。
如果需要,可以创建一个包含所需运算符的包装器,包括在执行操作之前复制第一个操作数的值。
答案 2 :(得分:6)
不幸的是,由于扩展类中没有运算符重载(必须在类或结构本身中定义运算符重载),因此没有将这些方法转换为运算符的真正方法。我希望(我相信很多其他人也会这样做)将来会改变,但现在没有办法做到这一点。