Код: Выделить всё
public enum RULE
{
NOTHING = 0x0,
FIRST_STEP = 0x1,
FOO_YOU = 0x2,
BAR_FOO = 0x10,
FOO = 0x20,
BAR = 0x40,
FOO_BAR = 0x80,
READY = 0x100,
...//LOTS MORE BITS
FINAL_FLAG_BIT= 0x10000000 //Final bit.. uses the 29th bit.
};
< /code>
Теперь скажите, что я делаю это .. < /p>
//only use 29 bits to save memory, probably still uses 4 bytes lol.
BitArray rules= new BitArray(29);
//As you can see what I tried to do.
public bool ruleEnabled(RULE i)
{
return rules[(int)i]; //
Поэтому я потратил впустую около 30 минут, реализуя это, не зная, что одно из его ограничений. Вы знаете, что нет никакого способа поднять его до его значения .. Без использования CopyTO
, поэтому я в итоге использовал только 1 переменную (кажется, это решение является чище и быстрее) и должен был изменить только 2 метода Setrule и Ruleenabled < /code>, чтобы он работал правильно. < /p>
Код: Выделить всё
private int rules; //uses only 29 of the 32 bits.
public bool ruleEnabled(RULE i)
{
int bits = (int)i;
return (rules & bits) == bits;
}
public void setRule(RULE rule, bool set) {
if (set)
rules |= (int)rule;
else
rules &= ~(int)rule;
}
< /code>
Мой вопрос: поступил ли я правильно? А почему битаррей когда -либо полезен? Если у него так много ограничений .. вы можете выполнять все его операции, такие как и
Я думаю, что Bitarray лучше всего использовать, когда вы имеете дело с большим количеством битов, тогда любой дат может представлять .. для сжатий/шифений и т. Д. .
Подробнее здесь: https://stackoverflow.com/questions/659 ... d-on-value