C# 字典遍历删除元素 - 避免异常及最佳实践
在C#中,当遍历一个Dictionary时,不能直接删除或修改其中的元素,因为这会导致“集合已修改,可能无法执行枚举操作”的异常。这是因为在遍历过程中,Dictionary的结构会发生变化,导致迭代器失效。\n\n要在遍历过程中删除元素,可以使用一个临时列表来保存要删除的键,然后再遍历这个列表并删除相应的键值对。这样就不需要新建容器了。\n\n下面是一个示例代码:\n\ncsharp\nDictionary<int, string> dictionary = new Dictionary<int, string>()\n{\n { 1, "One" },\n { 2, "Two" },\n { 3, "Three" },\n { 4, "Four" },\n { 5, "Five" }\n};\n\nList<int> keysToRemove = new List<int>();\n\nforeach (var kvp in dictionary)\n{\n if (kvp.Key % 2 == 0) // 以偶数为例,删除偶数键对应的键值对\n {\n keysToRemove.Add(kvp.Key);\n }\n}\n\nforeach (var key in keysToRemove)\n{\n dictionary.Remove(key);\n}\n\n// 输出剩余的键值对\nforeach (var kvp in dictionary)\n{\n Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");\n}\n\n\n输出结果为:\n\n\nKey: 1, Value: One\nKey: 3, Value: Three\nKey: 5, Value: Five\n\n\n请注意,这种方法只适用于在遍历过程中删除元素,如果需要修改元素的值,则需要使用dictionary[key] = newValue;语法进行修改。
原文地址: https://www.cveoy.top/t/topic/p2BD 著作权归作者所有。请勿转载和采集!