【发布时间】:2015-01-09 09:58:37
【问题描述】:
我理解不能同时使用枚举器和修改List<T>。添加或删除项目将使枚举器无效(http://msdn.microsoft.com/en-us/library/system.collections.ienumerator(v=vs.110).aspx),因为内部数组将被重新分配(http://msdn.microsoft.com/en-us/library/3wcytfd1(v=vs.110).aspx)。
- 即使
Count小于Capacity,它是否总是正确的?(据我了解,在这种情况下,数组不会被重新分配,因此枚举器必须有效); - 为什么
Current会返回它所设置的元素,即使枚举器已经失效?(我的意思是,如果数组被重新分配...); - 重新分配是否保留了项目的原始顺序?我的意思是,如果某个项目的索引为 n,那么它在添加和项目后是否具有相同的索引?(MSDN 说
Add将一个对象添加到列表的末尾)如果是这样,那么在列表中运行是安全的一个常规的for循环并添加项目,假设循环将只遍历每个项目一次,对吗?
【问题讨论】:
-
广告 1. 是 广告 2. 您认为有什么具体原因应该进行额外的处理以防止这种情况发生?广告 3. 是的
-
问问自己:如果 Current 指向您要删除的项目,迭代器应该移动到上一个还是下一个?如果你在 Current 之后插入一个项目,它是否应该包含在迭代中?以前呢?加到最后应该没问题,但是好像不一致。
-
@decPL 第二点是关于它是如何工作的,而不是为什么它会这样工作。还是谢谢。
-
@MarkO 好吧,我对枚举数为何无效没有疑问,唯一的问题是它何时发生。但是为什么/何时添加到末尾不一致?
标签: c#