2011-12-06 6 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です。readonlyなので、うまくいきません。

+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

私はその後、私は必要に応じてオリジナルを台無しに私を許可コピーを反復したい、最初のコレクションのコピーを作成します。

関連する問題