浅析C# Dictionary实现原理( 五 )
上面就是完整的 Add 代码 , 还是很简单的对不对?
8. Collection版本控制在上文中一直提到了 version 这个变量 , 在每一次新增、修改和删除操作时 , 都会使 version++ ;那么这个 version 存在的意义是什么呢?
首先我们来看一段代码 , 这段代码中首先实例化了一个Dictionary实例 , 然后通过 foreach 遍历该实例 , 在 foreach 代码块中使用 dic.Remove(kv.Key) 删除元素 。
文章插图
结果就是抛出了 System.InvalidOperationException:"Collection was modified..." 这样的异常 ,迭代过程中不允许集合出现变化。 如果在Java中遍历直接删除元素 , 会出现诡异的问题 , 所以.Net中就使用了 version 来实现版本控制 。
那么如何在迭代过程中实现版本控制的呢?我们看一看源码就很清楚的知道 。
文章插图
在迭代器初始化时 , 就会记录 dictionary.version 版本号 , 之后每一次迭代过程都会检查版本号是否一致 , 如果不一致将抛出异常 。
这样就避免了在迭代过程中修改了集合 , 造成很多诡异的问题 。 四、参考文献及总结本文在编写过程中 , 主要参考了以下文献 , 在此感谢其作者在知识分享上作出的贡献!
- #mscorlib/system/collections/generic/dictionary.cs,fd1acf96113fbda9
出处:
- 与用户|掌握好这4个步骤,实现了规模性的盈利
- 落地|“电竞之都”争夺战中,城市们该怎样实现产业落地?
- 美好生活|以人为本实现万物互融,中国视频社会化时代开启
- 手机|女神的自拍秘密,只需一部vivo S7便可以实现
- 自动任务|赶在三星 S21 发布之前实现语音解锁
- 产业|新主导力量来了,上海如何实现一次“革命性重塑”?
- Mate40Pro|华为Mate40Pro前置镜头有多强实现的这些功能国产机没人做到
- 突破|再传喜讯国产8英寸石墨烯晶圆亮相,中国芯再次实现新突破
- 如何基于Python实现自动化控制鼠标和键盘操作
- 小天才电话手表立体定位技术,真正实现无死角定位
