After digging in into BitArray with Reflector, I saw that this class, in its current state, is simply unusable; Here is why:
1. The class does not override Equals (and ==, !=, GetHashCode). We use BitArray because bitwise comparison is relatively very fast. I don’t want to perform reference comparison on bitwise array. I use bitwise structure to perform bitwise operation and bitwise comparison.
2. This class is sealed. Reading the first section can give you the idea why this is a mistake built on top of another mistake.
3. The exposed bitwise operations change the state of the object. Meaning doing bitArrayInstance.And(anotherBitArray) actually change the state of bitArrayInstance. I really don’t understand why this was made by design. It is very common to perform several bitwise operations on a BitArray object and perform some comparison afterwords.
We decide to disassemble the code into a new class named BitArray2 and I refactored the code so it would fit the “normal”(in my book) usage of BitArray.
BitArray2.zip (4.19 KB)