c# - 集合被修改;枚举操作可能无法执行

标签 c# .net collections

<分区>

这个问题在这个论坛被问了很多次。我知道问题的解决方案。但是我很好奇为什么“修改集合时无法执行枚举操作”

        List<string> list = new List<string>();

        list.Add("a");

        list.Add("b");

        int[] array = new int[6] { 1, 2, 3, 4, 5, 5 };

        HashSet<int> hashSet = new HashSet<int>();

        int i = 0;

        foreach (string s in list)
        {
            list[i] = "test";

            i++;
        }

但是当我将列表更改为 list.toarray 时它起作用了。

最佳答案

一般.Net集合不支持同时枚举和修改。线路list[i] = "test"修改集合 list当您正在枚举它时,会生成异常。没错,这是一个微不足道的修改,不会影响列表的结构,但是 List<T>甚至将就地修改视为破坏性的。

ToArray版本有效,因为现在你有 2 个集合

  1. list
  2. 创建的数组

您实际上是在枚举数组,从而修改原始的 list就好了。

关于c# - 集合被修改;枚举操作可能无法执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3875103/

相关文章:

c# - 如何获得看起来像没有选项卡的 TabControl 的控件?

c# - 将其转换为 SQL 的最佳方法是什么

php - 试图访问 laravel 集合之外的变量-> 每个

c# - 如何在 Windows 10 应用中实现应用内购买?

c# - 身份服务器 4 OpenId Connect 重定向到/Account/AccessDenied

c# - 从 linux C 到 Windows C# 的套接字问题

java - 如何以树形 View 显示消息回复? Java 和 hibernate

c# - 泛型是运行时多态还是编译时多态?

c# - 如何在每个第 n 个位置将连字符附加到字符串?

c# - 缓存集合并过滤它而不修改 ASP.NET 中的原始缓存集合