Dictionary.ContainsKey()引发KeyNotFound异常

时间:2019-06-22 15:15:41

标签: c#

我有一本充满清单的字典。在向字典添加新键之前,请检查其是否已在字典中。如果是这样,我将对象添加到列表中。如果没有,我创建一个新对象,并用键将其添加到字典中。问题在于Dictionary.ContainsKey()函数有时会抛出KeyNotFound异常,这对我完全没有意义。

我尝试使用Dictionary.TryGetValue()函数,该函数存在相同的问题。我还确保密钥不为空。

string key = time.ToString();
Console.WriteLine(key);

if (!synthSong.Track[difficulty].ContainsKey(key))
{
  List<SynthNote> notes = new List<SynthNote>();
  notes.Add(note);
  synthSong.Track[difficulty].Add(key, notes);
}
else
{
  synthSong.Track[difficulty][key].Add(note);
}

奇怪的是,该异常仅发生在某些数据集中。

1 个答案:

答案 0 :(得分:-2)

程序将歌曲文件从一种节奏游戏转换为另一种节奏游戏。为此,我从一个json文件中读取数据并将其导出到另一个json文件中。为此,我有一个类,每个类包含所有相关信息,例如json(de)serializer使用的难度。该错误发生在我正在更新程序以支持更多困难的过程中。我已经改变了导入方面以及将信息映射到导出类而不是导出类本身的代码中的困难。因此,我正在编写的难度键在导出类(名为synthSong)中不存在。我错误地认为该错误是由检查键变量引起的,这本来是没有意义的。我猜这就是为什么“键”不是要用作键的变量的最佳名称的原因。另外,最好不要将所有难度键都初始化为字典,而是在出现时创建它们。