使用System.Collections.Specialized.BitVector32的问题:一个错误?

时间:2010-07-03 06:35:31

标签: c#

我正在尝试进行简短的模拟,我需要一个小位数组,我选择了System.Collections.Specialized.BitVector32。

我在单线程对象中运行它,在单线程循环中运行大约1,000,000次,每次都用于索引{0,1,2}。

以下是代码:

private System.Collections.Specialized.BitVector32 currentCalc 
    = new System.Collections.Specialized.BitVector32();

private void storeInCurrent(int idx, bool val)
{
    currentCalc[idx] = val;
    if (currentCalc[idx] != val)
    {
        throw new Exception("Inconceivable!");
    }
}

根据我的理解,不应该抛出异常,但有时会这样做!每次都不会抛出异常,但是百分之百 - 只有1/6的时间! (这甚至更奇怪)

我做错了什么?

1 个答案:

答案 0 :(得分:3)

Look at MSDN;索引器采用掩码,而不是索引。那就是:

int mask = 1 << idx;

然后使用currentCalc[mask]

但这很奇怪;如果您足够高兴使用面具 - 为什么会使用BitVector32,而不仅仅是int。我假设索引器会获取索引。非常奇怪的设计决定。