.Net 5 新特性之--支持字典在迭代中进行修改

我们都知道以前字典迭代中是不支持动态修改的【否则会报错::“Collection was modified; enumeration operation may not execute.”--
集合已修改 无法进行操作】 但.Net 5将支持字典迭代中的动态修改 详情见下

  • 首先创建一个Dictionary 并尝试迭代中进行修改
 var dict = new Dictionary<int, int>()
            {
                [1001] = 1,
                [1002] = 10,
                [1003] = 20
            };

            foreach (var userid in dict.Keys)
            {
                dict[userid] = dict[userid] + 1;
            }

.Net 5之前

  • 通过ILSpy我们查看一下源码
    • 首先创建Dictionary 并插入数据 注意 _version 这个变量 这将是判断集合是否可迭代中修改的关键
    • 接着继续查看源码 进入迭代
    • 迭代中 尝试修改字典
    • 综上可以发现 .Net 5之前 迭代中不能修改字典 是因为当尝试修改字典时 会调用字典的索引器操作 造成 _version++ 从而在 .MoveNext()时判断出错 抛异常

.Net 5

  • .Net 5中是支持这种修改的 区别就在于上述操作的第二步 见图
    • 操作字典-version保持不变 因此不会出现异常 代码正常运行 实现了迭代中修改字典的操作
posted @   C余L小R鱼  阅读(181)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示