C#针对使用List在添加、修改和输出时存在的“集合已修改,可能无法执行枚举操作”问题解决方法


当使用List在添加、修改和输出时存在的“集合已修改,可能无法执行枚举操作”问题,本文参考其他作者的代码,做出的一个解释示例,仅做为学习交流使用。
转发请标注原文地址。。。。
------------------------------------------
定义一个int类型的空List

private static List<int> list = new List<int>();


创建一个控制台的空项目,在Program.cs内更改以下内容

复制代码
namespace TestConsole
{
    class Program
    {

        private static List<int> list = new List<int>();//非线程安全,“集合已修改;可能无法执行枚举操作。”
                                                        //private static ConcurrentBag<int> list = new ConcurrentBag<int>();
        static void Main(string[] args)
        {
            try
            {
                ThreadSafetyTest();
                Console.ReadKey();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.StackTrace + " " + ex.Message);
            }
        }
    }
}
复制代码

 

定义一个函数--- ThreadSafetyTest();新建一个name为 t 的Task,后台以一秒为周期往list里面添加count++的值;再新建一个Task将list的值输出;

复制代码
#region 线程安全之ConcurrentBag 验证
private static void ThreadSafetyTest()
{
    int count = 0;
    Task t = new Task(() =>
    {
        while (true)
        {
            Thread.Sleep(1000);
            count++;
            list.Add(count);
        }
    });
    t.Start();
    Task.Run(() =>
    {
        while (true)
        {
            foreach (var item in list)
            {
                Thread.Sleep(1000);
                Console.WriteLine($"{list.Count}");
            }
        }
    });
}
#endregion
复制代码


出现以下错误

 

 


解决方法:用ConcurrentBag<T>代替原来的List<T>;ConcurrentBag<T>为  对象的线程安全的无序集合

//private static List<int> list = new List<int>();//非线程安全,“集合已修改;可能无法执行枚举操作。”
private static ConcurrentBag<int> list = new ConcurrentBag<int>();


运行结果如下:

 

此处为List<T>存储方式,为顺序存储;ConcurrentBag<T>为逆序存储

 

 此处为ConcurrentBag<T>,逆序存储;而List<T>存储方式,为顺序存储;

 

 

posted @   sanmannn  阅读(1180)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示