Изменение значений в каждом цикле - в любом случае? - PullRequest
1 голос
/ 06 декабря 2011

Я знаю, что это противоречит правилам .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 ]

9 голосов
/ 06 декабря 2011

Вы можете создать копию коллекции ключей:

foreach (var x in Variables.Keys.ToArray())
0 голосов
/ 06 декабря 2011

Сначала я создаю копию коллекции, затем перебираю копию, позволяя мне по необходимости связываться с оригиналом.

0 голосов
/ 06 декабря 2011

Вы не можете редактировать 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...