문제

사전 (키, 값)을 고려하고 싶다면 ... 루프에 새 키 값 쌍을 추가 할 수없는 이유는 무엇입니까?

Dictionary<string, string> persons = new Dictionary<string, string>();

persons.Add("roger", "12");
persons.Add("mary", "13");

foreach (KeyValuePair<string,string> person in persons)
{
 Console.WriteLine("Name: " + person.Key + ", Age: " + person.Value);
 persons.Add("Xico", "22");
}
도움이 되었습니까?

해결책

이 작업을 수행하려면 사전 객체의 사본을 가져와야합니다 (여러 가지 방법으로 수행 할 수 있음)를 열거하고 원본에 원하는 것을 추가하십시오.

간단히 사전을 열거하는 동안 새 항목을 추가 할 수 없습니다.

다른 팁

열거자가 구성되는 방식 때문입니다.

MSDN에서 Dictionary.enumerator:

컬렉션이 변경되지 않은 한 열거자는 유효합니다. 요소를 추가, 수정 또는 삭제하는 것과 같은 컬렉션이 변경되는 경우, 열거자는 무효화되지 않고 동작이 정의되지 않습니다.

그래도이 문제를 해결하기에 쉽습니다. 사전 (또는 키)의 사본을 만들고 그것을 통해 반복하여/etc를 추가/제거하십시오. 필요에 따라 원래 사전에서.

열거 할 때 사전을 수정할 수는 없습니다. 그렇지 않으면 언제 끝났다는 것을 알고 있습니까?

컬렉션을 열거 할 때 (즉, Foreach 루프) 컬렉션에서 항목을 추가하거나 제거 할 수 없습니다. 허용 된 경우 가져올 모든 문제를 생각해보십시오.

그냥 ... 홀수입니다. 당신은 이미 사전에있는 각 사람에 대해 같은 사람을 다시 추가하려고합니다.

또한 : 왜 나이를 끈으로 저장합니까? int (또는 DateTime)가 훨씬 더 적합 해 보입니다.

그것은 당신이 스크롤하고있는 사전의 항목을 바꿀 것이기 때문에 ... 의미가 없습니다 ... (그리고 당신은 영원히 반복 할 수 있습니다)

루프를 반복하면서 컬렉션의 항목 수를 변경하려고합니다. 루프 용 A는이를 달성 할 수 있지만 Foreach Ierater는 그렇게 할 수 없습니다.

Dictionary<string, string> persons = new Dictionary<string, string>();
persons.Add("roger", "12");
persons.Add("mary", "13");
for (int i = 0; i < persons.Count; i++){ 
Console.WriteLine("Name: " + persons[i].Key + ", Age: " + persons[i].Value); 
persons.Add("Xico", "22");
}

마지막 항목에 도착하기 전에 항상 사람을 추가하기 때문에 이것은 무한 루프입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top