c# - 收集的真实枚举器是如何实现的?

标签 c# list ienumerator

有一个如何实现枚举器可能的例子: http://msdn.microsoft.com/en-us/library/system.collections.ienumerator.aspx这是一种有效的方法。然而,真正的 ListArray 在修改时会使它们的迭代器失效。

我的问题是——它是如何完成的?

我能想到的最好的是仍然保留对集合的引用,以及一些戳记(int id)。每次调整集合大小时,邮票都会递增。在枚举器端的每个 moveNext 上,都会检查标记——如果匹配,则枚举继续,如果不匹配——则抛出异常。

但这只是我的胡乱猜测,我没有找到任何可靠的东西。

最佳答案

how is it done?

微不足道。保留一个版本计数器。将创建枚举器时的版本计数器与每次产生时枚举对象中当前的版本计数器进行比较。完成的。显然:每次更改都要更改版本。

现在,“我没有找到任何可靠的东西”——你有没有想过——啊——阅读源代码?这都是公开的,你知道的......

http://referencesource.microsoft.com/

你寻找 mscorlib。

例如,ArrayList:http://referencesource.microsoft.com/#mscorlib/system/collections/arraylist.cs

没有比这更坚固的了。

关于c# - 收集的真实枚举器是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23594086/

相关文章:

python - 在python中创建二维数组的两种方法

c# - IEnumenator 出问题了

c# - 使用 IEnumerator 对项目进行异步操作

c# - 获取类类型?

c# - 我应该如何处理数据库中的渐进状态代码?

c# - 如何在获取 IEnumerable 之前对对象使用 list.where 函数

c# - 如何使用数组的项目作为其他变量的名称 C#

c# - 寻找 IEnumerable/IEnumerator 的更快实现

c# - 过滤器链接的更短语法

c# - 是否可以解决 C# 中函数调用的超时问题?