2013-10-10 4 views
0

목록과 관련된 질문을 제외하고는 이미 비슷한 질문을 던졌지 만 여기서 회원은 사전을 사용하도록 권장 했으므로 그렇게하기로했습니다. 다음은 원래 링크입니다.사전의 특정 위치에 요소 추가하기

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) 
}); 

, 나는 오류가 발생 :

An unhandled exception of type 'System.Collections.Generic.KeyNotFoundException' occurred in mscorlib.dll

Additional information: The given key was not present in the dictionary.

사람이 내가해야 할 일을 알고 있나요?

+0

나는 당신이 단순히 개체를 넣으려는 사전을 말할 수 없다고 생각합니다. – Gandarez

답변

3

추가하기 전에 rr_dict[Int32.Parse(priority_add_textbox.Text)]에 액세스하려고합니다.

사전은 주문하지 않으므로 rr_dictDictionary<int, List<process>>으로 정의한 것처럼 사용하려고하고 Int32.Parse(priority_add_textbox.Text) 키가 보유한 목록에 새 프로세스를 추가하려고합니다.

나는 이것에 비해 당신이 무엇을하려고하는지 잘 모르겠습니다.

그것은 당신이 사전에 추가하기 전에 다음의 라인을 따라 뭔가를 필요로하는 단지 경우 일 수 있습니다

var index = Int32.Parse(priority_add_textbox.Text); 
if (!rr_dict.ContainsKey(index)) 
{ 
    rr_dict[index] = new List<process>(); 
} 
... 
2

일반 Dictionary은 순서가 없습니다. 각 항목은 정의되지 않은 순서로 키 - 값 쌍으로 리턴됩니다.

주문을 고려한 사전을 원할 경우 OrderedDictionary을 사용하십시오.

현재 코드를 사용하면 주어진 항목을 추가하는 대신 키 입력 항목에 액세스하려고 시도 할 것입니다.

0

당신이 얻고있는 오류는 사전의 Item 속성에 의해 발생합니다. 사전의 특정 위치 (예 : Int32.Parse(priority_add_textbox.Text))에 액세스하려고합니다. 존재하지 않는다면 먼저 생성해야합니다. 뭔가 이런 :

rr_dict[Int32.Parse(priority_add_textbox.Text)] = new Queue<process>(); 
관련 문제