http://space.cnblogs.com/question/1802/)
算了,全部copy过来吧:
程序代码如下:
private IDictionary
btsClassList = new Dictionary
();
如上的代码,在标著的地方,出现了这样的错误:
实在是搞不明白,怎么会出现如上的错误….
请各位老大帮忙看看.
问题补充:反编译查看了下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/
| btsClassList[btsName] = tempClass;//这个地方,出现错误。。。
老兄JS写多了,入戏太深了吧 .Add(
2小时前
回答者: t-mac.NET – 菜鸟二级 问题解决如楼上所说 IDirectory支持这么用,但是Directory不允许,如果声明IDirectory是Hashtable的话就可以这么用。 |
转载于:https://www.cnblogs.com/yanchanggang/archive/2008/07/04/1235900.html
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206385.html原文链接:https://javaforall.net
