在foreach中刪除元素時,每一次刪除都會導致集合的大小和元素索引值發生變化,從需導致在foreach中刪除元素會出現異常。
解決方法是采用for循環,並且從尾到頭遍歷。
如果是從頭到尾遍歷,你將只會刪除一半的元素。如下所示:
namespace CSharpLearning
{
using System;
using System.Collections.Generic;
///
/// The program.
///
public class Program
{
///
/// The main.
///
public static void Main()
{
List integers = 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()
{
List integers = 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