相关疑难解决方法(0)

如何在迭代时从通用列表中删除元素?

我正在寻找一个更好的模式来处理每个需要处理的元素列表,然后根据结果从列表中删除.

你不能.Remove(element)在里面使用foreach (var element in X)(因为它导致Collection was modified; enumeration operation may not execute.异常)...你也不能使用for (int i = 0; i < elements.Count(); i++),.RemoveAt(i)因为它会扰乱你在集合中的当前位置i.

有一种优雅的方式来做到这一点?

c# generics loops list key-value

418
推荐指数
15
解决办法
35万
查看次数

为什么我在迭代时不应该修改集合

我知道.net集合类型(或至少一些集合类型)不允许在迭代时修改集合.

例如,在List类中存在如下代码:

if (this.version != this.list._version)
 ThrowHelper.ThrowInvalidOperationException(ExceptionResource.InvalidOperation_EnumFailedVersion);
Run Code Online (Sandbox Code Playgroud)

但显然这是设计迭代器类的开发人员的决定,因为我可以提供一些实现IEnumerable,至少在修改底层集合时不抛出任何异常.

然后我有一些问题:

  • 为什么我在迭代时不应修改集合?

  • 可以创建一个支持在迭代时修改的集合,而不会有任何其他问题吗?(注意:第一个答案也可以回答这个问题)

  • 当C#编译器生成Enumerator接口实现时考虑到这样的事情?

.net c# collections ienumerable

2
推荐指数
1
解决办法
510
查看次数

标签 统计

c# ×2

.net ×1

collections ×1

generics ×1

ienumerable ×1

key-value ×1

list ×1

loops ×1