迭代过程中安全移除泛型列表元素
在许多编程场景中,需要处理列表中的元素。然而,如果在此过程中需要移除某些元素,标准方法可能会出现问题。
在foreach
循环中使用.Remove(element)
会引发异常,而递减计数器并使用.RemoveAt(i)
则会破坏当前集合位置。
更优雅的解决方案是反向迭代列表:
<code class="language-csharp">for (int i = safePendingList.Count - 1; i >= 0; i--) { // 处理元素 // 如需移除元素 // safePendingList.RemoveAt(i); }</code>
这确保了移除元素不会影响列表中的当前位置。
或者,RemoveAll
方法允许根据谓词过滤掉元素:
<code class="language-csharp">safePendingList.RemoveAll(item => item.Value == someValue);</code>
以下示例演示了for
循环方法的用法:
<code class="language-csharp">var list = new List<int>(Enumerable.Range(1, 10)); Console.WriteLine("Before:"); list.ForEach(i => Console.WriteLine(i)); list.RemoveAll(i => i > 5); Console.WriteLine("After:"); list.ForEach(i => Console.WriteLine(i));</code>
输出:
<code>Before: 1 2 3 4 5 6 7 8 9 10 After: 1 2 3 4 5</code>
以上是如何在迭代时从通用列表中安全地删除元素?的详细内容。更多信息请关注PHP中文网其他相关文章!