Dictionary 索引超出数组界限

时间:2024-02-25 07:44:31
今天碰到了一个Dictionary的的问题,现记录下:(可以查看我提出的问题:http://space.cnblogs.com/question/1802/)

算了,全部copy过来吧:

程序代码如下:

private IDictionary<string, BtsClass> btsClassList = new Dictionary<string, BtsClass>();

 BtsClass tempClass = null;
 if (!btsClassList.Keys.Contains(btsName))
     {
       tempClass = new BtsClass(btsName, 15);
       tempClass.MaginDelegate += new MaginDelegate(BtsClass_MaginDelegate);
       btsClassList[btsName] = tempClass;//这个地方,出现错误。。。
     }
     else
     {
       tempClass = btsClassList[btsName];
     }

如上的代码,在标著的地方,出现了这样的错误:

System.IndexOutOfRangeException: 索引超出了数组界限。
   在 System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   在 System.Collections.Generic.Dictionary`2.set_Item(TKey key, TValue value)

 

实在是搞不明白,怎么会出现如上的错误....

请各位老大帮忙看看.

 


提问者:颜昌钢 - 初学一级

问题补充:反编译查看了下Directory的代码:
btsClassList.Add(btsName,tempClass);

btsClassList[btsName] = tempClass;
最终的不同在于调用 Insert(TKey key, TValue value, Boolean add)
这个方法传递的参数不同.

前一种方法的Boolean add 为true;
后一种方法的Boolean add 为false;

而唯一用到这个 参数的地方 只有一处:
for (int i = this.buckets[index]; i >= 0; i = this.entries[i].next)
{
if ((this.entries[i].hashCode == num) && this.comparer.Equals(this.entries[i].key, key))
{
if (add)
{
ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate);
}
this.entries[i].value = value;
this.version++;
return;
}
}

看了下,不管用哪种方法,似乎还是会存在 错误的可能....

索引超出数组界限....看见这个问题的时候,最开始以为btsClassList[btsName] = tempClass; 这样使用,当空间不够的时候,没有重新申请空间 才会导致 有这样的错误.
看了下源代码,实际上当 栈间不够的时候,有重新在分配的过程........


//2008-07-04 18:49:00
呵呵,产生这样的错误,最终可能在于:
1:程序 多线程
2:Directory 不是线程安全的......

参考:
1:http://forums.msdn.microsoft.com/zh-CN/netfxbcl/thread/c8a83d23-a62e-4e37-a902-8e229bf3c31f/
2:http://forums.msdn.microsoft.com/zh-CN/csharpgeneral/thread/283a0e50-749e-43de-9f3c-6af314ff31be/

所有回答(2)
btsClassList[btsName] = tempClass;//这个地方,出现错误。。。


老兄JS写多了,入戏太深了吧

.Add(
 
2小时前   回答者:t-mac.NET - 菜鸟二级
问题解决如楼上所说

IDirectory支持这么用,但是Directory不允许,如果声明IDirectory是Hashtable的话就可以这么用。

相关文章