• C# Collection was modified;enumeration operation may not execute


    一、问题描述

      在做 数组、列表、集合遍历时,可能我们会遇见这个问题。Collection was modified;enumeration operation may not execute ,翻译的中文意思:集合已修改;枚举操作可能无法执行。

    二、解决方案

      就是在遍历时,不要改变正在遍历的集合即可,您可以先遍历完在对其进行操作。

    三、案例

      出现问题前的代码如下,就是我在遍历 items 的同时,又往 items 中 add 数据。

    public async Task<ListResultDto<RecordBookListDto>> GetFlatRecordBookItems()
            {
                var query = _recordBookRepository
                    .GetAll();
                var entities = await query.ToListAsync();
                var items = new List<RecordBookListDto>();
                foreach (var entity in entities)
                {
                    var dto = entity.MapTo<RecordBookListDto>();
                    items.Add(dto);
                }
                
                //todo 获取测点编号
                foreach (var item in items)
                {
                    if (!string.IsNullOrEmpty(item.DataId))
                    {
                        String[] array = item.DataId.Replace("[", "").Replace("]", "").Replace(""", "").Split(',');
    
                        foreach (var ar in array)
                        {
                            var ins = _instrumentGroupRepository.Get(Guid.Parse(ar));
                            var l = new RecordBookListDto();
                            l.Id = Guid.Parse(ar);
                            l.ParentId = item.Id.ToString();
                            l.Name = ins.No;
                            items.Add(l);
                        }
                    }
                }
                
                var listDto = new ListResultDto<RecordBookListDto>(items);
                return listDto;
            }
    

      修改完成后的代码:

    public async Task<ListResultDto<RecordBookListDto>> GetFlatRecordBookItems()
            {
                var query = _recordBookRepository
                    .GetAll();
                var entities = await query.ToListAsync();
                var items = new List<RecordBookListDto>();
                foreach (var entity in entities)
                {
                    var dto = entity.MapTo<RecordBookListDto>();
                    items.Add(dto);
                }
    
                List<RecordBookListDto> newItems = new List<RecordBookListDto>();
    
                //todo 获取测点编号
                foreach (var item in items)
                {
                    if (!string.IsNullOrEmpty(item.DataId))
                    {
                        String[] array = item.DataId.Replace("[", "").Replace("]", "").Replace(""", "").Split(',');
    
                        foreach (var ar in array)
                        {
                            var ins = _instrumentGroupRepository.Get(Guid.Parse(ar));
                            var l = new RecordBookListDto();
                            l.Id = Guid.Parse(ar);
                            l.ParentId = item.Id.ToString();
                            l.Name = ins.No;
                            newItems.Add(l);
                        }
                    }
                }
    
                foreach (var item in newItems)
                {
                    items.Add(item);
                }
    
                var listDto = new ListResultDto<RecordBookListDto>(items);
                return listDto;
  • 相关阅读:
    Mybatis的XML中数字不为空的判断
    初步使用VUE
    Vue中实现菜单下拉、收起的动画效果
    Docker For Windows时间不对的问题
    freemarker使用自定义的模板加载器通过redis加载模板
    .net core 打印请求和响应的内容
    codedecision P1113 同颜色询问 题解 线段树动态开点
    洛谷P2486 [SDOI2011]染色 题解 树链剖分+线段树
    洛谷P3150 pb的游戏(1)题解 博弈论入门
    codedecision P1112 区间连续段 题解 线段树
  • 原文地址:https://www.cnblogs.com/gzbit-zxx/p/10762215.html
Copyright © 2020-2023  润新知