在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;语法进行修改

C# dictionary 如何遍历过程中删除不新建容器

原文地址: http://www.cveoy.top/t/topic/ikvg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录