gpt4 book ai didi

c# - Enumerator.MoveNext() 在第一次调用时抛出 'Collection was Modified'

转载 作者:行者123 更新时间:2023-11-30 13:20:05 26 4
gpt4 key购买 nike

考虑以下代码:

List<int> list = new List<int>();
IEnumerable<int> enumerable = list;
IEnumerator<int> enumerator = enumerable.GetEnumerator();
list.Add(1);
bool any = enumerator.MoveNext();

在运行时,最后一行抛出:

InvalidOperationException: Collection was modified; enumeration operation may not execute.

我了解 IEnumerators 需要在 IEnumerable 更改时抛出“集合已修改”异常,但我不明白这一点:

为什么 IEnumerator第一次 调用 MoveNext() 时抛出这个异常?由于 IEnumerator 直到第一次调用 MoveNext() 才代表 IEnumerable 的状态,为什么不能启动跟踪第一个 MoveNext() 而不是 GetEnumerator() 的更改?

最佳答案

可能是因为规则“如果基础集合被修改则枚举器无效”比规则“如果基础集合在第一次调用 MoveNext 后修改则枚举器无效”更简单。或者这只是它的实现方式。此外,假设枚举器代表创建枚举器时基础集合的状态是合理的,依赖不同的行为可能是错误的来源。

关于c# - Enumerator.MoveNext() 在第一次调用时抛出 'Collection was Modified',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11287185/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com