在字典的特定位置添加元素

时间:2013-10-10 20:27:20

标签: c# dictionary

我已经问了一个类似的问题,除了它是一个列表,但是这里的成员建议我使用字典,所以我决定这样做。这是原始链接。

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”类型异常

     

附加信息:字典中没有给定的密钥。

有谁知道我需要做什么?

3 个答案:

答案 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>();