Я пытаюсь реализовать механизм кэширования для безопасного перечисления коллекций , и я проверяю, вызывают ли все модификации встроенных коллекций InvalidOperationException
для соответствующих их перечислителей. Я заметил, что на платформе .NET Core методы Dictionary.Remove
и Dictionary.Clear
не вызывают это исключение. Это ошибка или функция?
Пример с Remove
:
var dictionary = new Dictionary<int, string>();
dictionary.Add(1, "Hello");
dictionary.Add(2, "World");
foreach (var entry in dictionary)
{
var removed = dictionary.Remove(entry.Key);
Console.WriteLine($"{entry} removed: {removed}");
}
Console.WriteLine($"Count: {dictionary.Count}");
Вывод:
[1, Hello] удалено: True
[2, World] удалено: True
Количество: 0
Пример с Clear
:
var dictionary = new Dictionary<int, string>();
dictionary.Add(1, "Hello");
dictionary.Add(2, "World");
foreach (var entry in dictionary)
{
Console.WriteLine(entry);
dictionary.Clear();
}
Console.WriteLine($"Count: {dictionary.Count}");
Вывод:
[1, Hello]
Количество: 0
Ожидаемое исключение:
InvalidOperationException: Коллекция была изменена;Операция перечисления может не выполняться.
... как создается методом Add
и теми же методами в .NET Framework.
.NET Core 3.0.0, C # 8, VS 201916.3.1, Windows 10