【发布时间】:2015-05-28 02:47:29
【问题描述】:
我创建了一个类,它使用自定义类作为键和值创建字典,并通过 xml 序列化存储它。然后点击“加载”反序列化xml文件并加载数据。
问题在于以下代码。在反序列化并尝试加载字典后,我在这里不断收到 KeyNotFound 异常:
foreach (Perk p in perksTier1[skill])
{
string s = p.Name.ToString();
if (!lboxTier1.Items.Contains(s))
lboxTier1.Items.Add(s);
}
但是,当我单步执行代码并检查字典时,它看起来就像它应该的那样,并且清楚地显示了 Skill 键。
这是真正奇怪的部分: 使用 ContainsKey 返回 null,但使用 GetKeys GIVES ME THE KEY
呜呜。请帮忙。
【问题讨论】:
-
你确定它们是相等的字符串(如果键是字符串的话)?也许不同的外壳?你在哪里得到错误,
perksTier1[skill]? -
可能在检查器中看不到的键值之前或之后有一些尾随空格?当从字节数组反序列化为对象时,我经常收到此错误。试试 Skill.Trim() 看看会发生什么?
-
如果你使用你写的其他类作为键,你是如何实现 GetHashCode 和 Equals 的?必须实现这些方法properly 才能使字典按预期运行。
-
您可以向字典提供
IEquailityComparer<TKey>的实现,而不是在类本身上定义相等性。 -
另外,Ken...关于 VS 的破解是个笑话。看到 c# 标签了吗?我知道 IDE 和语言之间的区别。
标签: c# dictionary