C#Dictionary异常:给定关键字不在字典中是设置错误造成的,解决方法为:
1、首先可以通过‘键’来找到访问字典所需要的值,类似于列表和元组的访问方式。
2、如果‘键’在字典里不存在,则就会出现报错。
3、所以就需要判断‘键’是否存在。
4、也可以使用get( )方法获取指定键的值。
注意事项:
C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。
C#Dictionary异常:给定关键字不在字典中,是代码错误造成的,解决方法如下;
1、首先编写一个简单的异常的代码,然后可以通过SystemException去捕获异常。
2、一般情况,需要调用异常对象的Message属性查看异常信息。
3、然后就可以通过InnerException属性获取抛出异常的实例了。
4、此时运行该控制台程序,就可以看到异常信息。
5、最后如果想要看到具体的内容,直接使用异常对象转换为字符串即可。
兄弟,这个真的是你粗心了。
问题确实是来自于dicFirstDBGroup在某次循环中找不到iCirc+1这个键。就是说你的字典的键值对并不是从Key=1到Key=iSum都齐全的,中间有漏项。漏掉的一项就是你报错时的iCirc+1这个Key,但是,它在鼠标查看即时数据时是第iCirc元素而非iCirc+1.
为什么会出现你看到的"诡异"显示呢?
拿鼠标指向dicFirstDBGroup,仔细看会发现显示的是:
+ dicFirstDBGroup Count=XXX
展开后看到的应该是类似这样的东西:
[0] {[1,urNamespace.csMyDB]}
[1] {[2,urNamespace.csMyDB]}
因为字典是有序的键值对集合,这里查看到的[0][1]其实是dicFirstDBGroup的子项索引,其实它们的键分别是1和2.
再说“string strTmp=dicFirstDBGroup[49].strSQLValue”,报错说明确实没有49这个Key,你查看时可能没太留意直接看的是即时数据的[49],其实[49]的值却是dicFirstDBGroup[50]。
想测试也很简单,追踪一下,dicFirstDBGroup.Keys.Count一定小于iSum,说明字典键并非1到iSum所有数都有。
至于为什么鼠标放在dicFirstDBGroup[49].strSQLValue的strSQLValue上没有值,很简单,没键就找不到值。
使用字典时还请多加留意,要么使用ContainsKey判断有无该键,要么使用TryGetValue尝试读取值。
是因为dicFirstDBGroup 中不存在某个KEY值,最有可能是iSum不在字典中.
"insert into " + strTableName + " values(" + dicFirstDBGroup[iCirc+1].
这里的问题么,你用的 iCirc + 1