给出以下堆栈跟踪:
MESSAGE: Value cannot be null.Parameter name: key
SOURCE: mscorlib
TARGETSITE: Void ThrowArgumentNullException(System.ExceptionArgument)
STACKTRACE:
at System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
at System.Collections.Generic.Dictionary'2.FindEntry(TKey key)
at System.Collections.Generic.Dictionary'2.get_Item(TKey key)
at MyCompany.MAF.Agent.ServiceContracts.ConvertUtils.Convert(Dictionary'2 from) in D:\Development\MAF\Agent\MyCompany.MAF.Agent\ServiceContracts\ConvertUtils.cs:line 11
我的结论是,以下代码块以某种方式从输入字典的 Keys 集合中检索到了 null。然而,输入字典是一个实例Dictionary<string, string>
.实施Dictionary<string, string>
使这种情况不可能发生。添加带有空键的项目时,会引发异常。
internal static KeyValuePair<string, string>[] Convert(IDictionary<string, string> from)
{
List<KeyValuePair<string, string>> ret = new List<KeyValuePair<string, string>>();
foreach (string key in from.Keys)
ret.Add(new KeyValuePair<string, string>(key, from[key]));
return ret.ToArray();
}
我经常遇到这个问题,因为我犯了允许多个线程访问同一字典的错误。确保情况并非如此,因为Dictionary
不是线程安全的。
(顺便说一下,你的方法可以大大简化。Dictionary<K,V>
已经是一个IEnumerable<KeyValuePair<K,V>>
。你应该能够做ToArray
on one.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)