2011-12-06 2 views
1

.NET 규칙에 위배됩니다.하지만 때로는 필요합니다. 예를 들어 Dictionary<string, bool>을 실행해야합니다. 이 사전은 파싱 된 논리 방정식에 내 변수를 저장합니다. 진리표를 출력하고 싶기 때문에 반복하고 요소를 설정해야합니다. 내가 해봤For Each 루프의 값 수정 - 어떤 방식 으로든?

한 가지

 foreach (var x in Variables.Keys) 
     { 
      bool on = ((in) & (j << in)) > 0; 
      Variables[x] = on; 
      builder.Append(on == true ? '1' : '0').Append('\t'); 
      j++; 
     } 

난 그냥 얻을 수있는 InvalidOperationException : 컬렉션이 수정; 열거 연산이 실행되지 않을 수 있습니다. 사전을 배열로 변환하고 그런 식으로 수정하려고 시도했지만 KeyValuePair.Value읽기 전용이므로 작동하지 않습니다.

+8

for 루프를 사용하십시오. – jrummell

+0

^실제로 대답해야합니다. –

답변

9

당신은 키 모음의 사본을 만들 수 있습니다

foreach (var x in Variables.Keys.ToArray()) 
+0

..... _facepalm_ –

0

당신은 루프에서 Dictionary<TKey, TValue>을 편집 할 수 없습니다.

이 시도 :

var resultVariables = new Dictionary<string, bool>(Variables.Count); 

foreach (var x in Variables.Keys) 
{ 
    bool on = ((in) & (j << in)) > 0; 
    resultVariables[x] = on; 
    builder.Append(on == true ? '1' : '0').Append('\t'); 
    j++; 
} 

Variables = resultVariables; 
0

나는 그때 필요에 따라 원래 엉망 날 수 있도록 복사를 반복 것, 첫 번째 컬렉션의 복사본을 만들 수 있습니다.