Критическое изменение OrderedDictionary в .NET 4?

Мой коллега наткнулся на это на днях, когда мы работали над обновлением проекта до .NET 4.

Учитывая следующий код:

 var od = new System.Collections.Specialized.OrderedDictionary();

 od.Add("key1", "value1");
 od.Add("key2", "value2");

 foreach (System.Collections.DictionaryEntry entry in od)
 {
     od[entry.Key] = null;
 }

В .NET 3.5 установка записи на null будет работать нормально. Как и ожидалось, ключ все еще будет в словаре, а его значение будет равно null.

В .NET 4.0 это вызывает исключение InvalidOperationException, говорящее, что

Коллекция была изменена; операция перечисления может не выполняться.

Я подумал, что, может быть, в OrderedDictionary внесено изменение, при котором установка записи на ноль приведет к ее полному удалению, но при быстрой проверке выясняется, что запись все еще существует, когда вы устанавливаете значение null. не зарегистрировано?

5
задан Peter Mortensen 20 January 2019 в 12:33
поделиться