我已经问了一个类似的问题,除了它是一个列表,但是这里的成员建议我使用字典,所以我决定这样做。这是原始链接。
Adding a value to a specific location in a list of queues
所以,我正在尝试将新流程添加到字典中的特定位置。
rr_dict[Int32.Parse(priority_add_textbox.Text)].Add(new process {
Proc_Id = sjf_queue.Size + 1,
Proc_BurstTime = Int32.Parse(time_add_texbox.Text),
Proc_Priority = Int32.Parse(priority_add_textbox.Text)
});
发生这种情况时,我收到错误:
mscorlib.dll中发生未处理的“System.Collections.Generic.KeyNotFoundException”类型异常
附加信息:字典中没有给定的密钥。
有谁知道我需要做什么?
答案 0 :(得分:3)
您尝试在添加rr_dict[Int32.Parse(priority_add_textbox.Text)]
之前访问它。
字典不是订购的,因此您尝试使用rr_dict
,就像它被定义为Dictionary<int, List<process>>
一样,并且正在将新流程添加到密钥Int32.Parse(priority_add_textbox.Text)
所持有的列表中。 / p>
与此相比,我不确定你要做什么。
在添加到字典之前,您可能只需要按照以下方式处理:
var index = Int32.Parse(priority_add_textbox.Text);
if (!rr_dict.ContainsKey(index))
{
rr_dict[index] = new List<process>();
}
...
答案 1 :(得分:2)
普通的Dictionary
是无序的。它的每个条目都作为具有未定义顺序的键值对返回。
如果您想要同时考虑订单的词典,请使用OrderedDictionary
。
使用当前代码,您将尝试访问密钥条目,而不是添加给定条目(这是您正在尝试执行的操作)。
答案 2 :(得分:0)
您获得的错误是由字典的Item
属性引起的。您正在尝试访问字典中的特定位置(即Int32.Parse(priority_add_textbox.Text)
的结果)。如果不存在,则必须先创建它。像这样:
rr_dict[Int32.Parse(priority_add_textbox.Text)] = new Queue<process>();