- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下代码:
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/
.NET 应用程序崩溃并显示堆栈跟踪: 调用堆栈: Layouts!Layouts.Ribbon.SizeAndPositionControlViewModel+OnLayoutSelectionCh
我有一个简单的代码如下: foreach ($someFile in Get-ChildItem) { if (($someFile.Name.Substring(0,1) -eq "R")
IEnumerator.MoveNext() 的实现是否预计会相对较快?或者如果“移动到下一项” 包括磁盘 IO、Web 请求或其他可能长时间运行的操作是否可以? 例如,我正在处理一个处理文档的项目,
我是 c# 的新手,我知道必须实现接口(interface)中定义的方法 但在下面的代码中我没有实现 MoveNext() 方法 static void Main() { List list
在集合上使用 Linq,哪个最适合发现集合不为空? HasChild = Childs.GetEnumerator().MoveNext() ? true : false; 和 HasChild =
使用 log4net 声明为: private readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod(
有人可以解释为什么这段代码在无限循环中运行吗?为什么 MoveNext() 总是返回 true? var x = new { TempList = new List { 1, 3, 6, 9 }.Ge
我正在努力实现 100% 的代码覆盖率。然而,代码覆盖以某种方式提示某些未涵盖的 MoveNext() 方法,但是,没有迭代 IEnumerable 的代码路径... 关于如何覆盖 MoveNext
我正在努力实现 100% 的代码覆盖率。然而,代码覆盖以某种方式提示某些未涵盖的 MoveNext() 方法,但是,没有迭代 IEnumerable 的代码路径... 关于如何覆盖 MoveNext
我有一个 WebAPI它具有以下代码段,其中在使用我的记录器记录的 try 块中编写的代码中存在 Null 引用异常。 但是在TargetSite的Exception登录,我收到 无效 MoveNex
我是 IL 的新手,但据我所知,MoveNext 应该在 Current 之前调用,假设我们有这样的 foreach 语句: foreach (var i in Enumerable.Empty())
考虑以下代码: List list = new List(); IEnumerable enumerable = list; IEnumerator enumerator = enumerable.G
我正在使用 crm Dynamics 365 许可 我有 BPF(业务流程) 我想使用 javascript 前进到最后一个阶段,但它仅使用此代码移动一个阶段: for (var i = 0; i <
我试图在下面的示例中获取异常堆栈跟踪的最内部方法名称。由于未知原因,我总是得到 MoveNext 方法名称,而不是真实名称。我该如何解决? var st = new StackTrace(ex, tr
构建二叉搜索树后BST其中包括 BSTNode我正在尝试为其实现 IEnumerable 接口(interface)。 这就是我构建 BSTNodeEnumrator 的方式: public clas
我正在使用 MongoDB 实现 PubSub。如果我创建查询并指定带有 NoCursorTimeout 的 TailableCursor: using(var enumerator = _Colle
下面的代码不会抛出,即使在枚举过程中修改了枚举集合。 using System; using System.Collections; using System.Runtime.CompilerServ
你好, 我在使用一些简单的 VBA 时遇到了问题。我编写了一个脚本来进行文本查询(没有输入参数,因此没有真正的用户交互、SQL 注入(inject)等),针对数据库运行它,并将其转储到新的工作表中。这
This thread表示 LINQ 的 OrderBy 使用快速排序。考虑到 OrderBy 返回一个 IEnumerable,我正在努力理解它的意义。 我们以下面这段代码为例。 int[] arr
我正试图找出我们代码中的错误。我把它归结为下面的片段。在下面的示例中,我有一个 int 网格(行列表),但我想找到具有 1 的列的索引。其实现是为每一行创建一个枚举器,并逐步遍历每一列通过保持普查员步
我是一名优秀的程序员,十分优秀!