C#Dictionary异常:给定关键字不在字典中

2025-03-21 22:49:02
推荐回答(5个)
回答1:

C#Dictionary异常:给定关键字不在字典中是设置错误造成的,解决方法为:

1、首先可以通过‘键’来找到访问字典所需要的值,类似于列表和元组的访问方式。

2、如果‘键’在字典里不存在,则就会出现报错。

3、所以就需要判断‘键’是否存在。

4、也可以使用get( )方法获取指定键的值。

注意事项:

C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。

回答2:

C#Dictionary异常:给定关键字不在字典中,是代码错误造成的,解决方法如下;

1、首先编写一个简单的异常的代码,然后可以通过SystemException去捕获异常。

2、一般情况,需要调用异常对象的Message属性查看异常信息。

3、然后就可以通过InnerException属性获取抛出异常的实例了。

4、此时运行该控制台程序,就可以看到异常信息。

5、最后如果想要看到具体的内容,直接使用异常对象转换为字符串即可。

回答3:

兄弟,这个真的是你粗心了。
问题确实是来自于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尝试读取值。

回答4:

是因为dicFirstDBGroup 中不存在某个KEY值,最有可能是iSum不在字典中.

回答5:

"insert into " + strTableName + " values(" + dicFirstDBGroup[iCirc+1].

这里的问题么,你用的 iCirc + 1