在foreach中刪除元素時,每一次刪除都會導致集合的大小和元素索引值發生變化,從需導致在foreach中刪除元素會出現異常。
解決方法是采用for循環,並且從尾到頭遍歷。
如果是從頭到尾遍歷,你將只會刪除一半的元素。如下所示:
namespace CSharpLearning { using System; using System.Collections.Generic; ////// The program. /// public class Program { ////// The main. /// public static void Main() { Listintegers = new List (); for (int i = 0; i < 100; i++) { integers.Add(i); } for (int i = 0; i < integers.Count; i++) { integers.Remove(integers[i]); } Console.WriteLine(integers.Count); } } } // Output: 50
正確的做法是從尾到頭遍歷,如下所示:
namespace CSharpLearning { using System; using System.Collections.Generic; ////// The program. /// public class Program { ////// The main. /// public static void Main() { Listintegers = new List (); for (int i = 0; i < 100; i++) { integers.Add(i); } for (int i = integers.Count - 1; i >= 0; i--) { integers.Remove(integers[i]); } Console.WriteLine(integers.Count); } } } // Output: 0