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