zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    jQuery实现复选框全选、全不选、反选问题解析
    春节回来后至今的工作汇总
    后台管理的权限
    谨记:新增逻辑和编辑逻辑的相同和不同
    html5的本地数据库
    php做api接口的一些随笔
    js setTimeout
    在jquery选中器中使用变量
    jQuery ajax用get方法传递给api数组
    关键词处理,表格内容分类处理
  • 原文地址:https://www.cnblogs.com/gzbit-zxx/p/10762215.html
Copyright © 2011-2022 走看看