【问题标题】:How real enumerator for collection is implemented?集合的真实枚举器是如何实现的?
【发布时间】:2014-06-28 22:24:06
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# list ienumerator


    【解决方案1】:

    它是怎么做的?

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

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

    http://referencesource.microsoft.com/

    您正在寻找 mscorlib。

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

    没有比这更坚固的了。

    【讨论】:

    • 哎呀!当然,您可以使用以下工具之一 Reflector/IlSpy/Resharper 从您正在使用的 .NET 的实际版本(或第 3 方库)中查看实际代码。
    • 我会在 10 分钟内接受你的回答(SO 的限制),已经谢谢你了 :-) 我忘了 MS 是开源的,所以,是的,它是可靠的 :-D
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 2015-05-30
    • 2022-10-25
    相关资源
    最近更新 更多