我正在尝试进行简短的模拟,我需要一个小位数组,我选择了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的时间! (这甚至更奇怪)
我做错了什么?
答案 0 :(得分:3)
Look at MSDN;索引器采用掩码,而不是索引。那就是:
int mask = 1 << idx;
然后使用currentCalc[mask]
但这很奇怪;如果您足够高兴使用面具 - 为什么会使用BitVector32
,而不仅仅是int
。我也假设索引器会获取索引。非常奇怪的设计决定。