• 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;
  • 相关阅读:
    连接池——tomcat自带连接池。
    jsp小记
    结合properties配置文件优化jdbc连接工具类
    StringBuffer
    多重继承关系初始化顺序及初始化
    Error
    算法:插入排序
    算法:冒泡排序
    算法:选择排序
    注册Activity
  • 原文地址:https://www.cnblogs.com/gzbit-zxx/p/10762215.html
Copyright © 2020-2023  润新知