修改每个循环中的值 - 任何方式?

时间:2011-12-06 16:04:14

标签: c# .net foreach

我知道这违反了.NET规则,但有时我需要它。例如,我需要运行Dictionary<string, bool>。该字典将我的变量存储在解析的逻辑方程中。我想输出一个真值表,所以我需要迭代并设置元素。

我尝试过的一件事是

        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 只读,所以它不起作用。

3 个答案:

答案 0 :(得分:9)

您可以创建密钥集的副本:

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

答案 1 :(得分: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;

答案 2 :(得分:0)

我首先创建一个集合的副本,然后我会遍历副本,这样我就可以根据需要弄乱原始集合。