迭代過程中安全移除泛型列表元素
在許多編程場景中,需要處理列表中的元素。然而,如果在此過程中需要移除某些元素,標準方法可能會出現問題。
在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中文網其他相關文章!