星期四, 7月 23, 2009

如何在 foreach 刪除 collection

之前在寫程式時, 遇到一個問題, 就是在foreach裡修改collection, 看code吧..

List<int> intLi = new List<int>();
intLi.Add(1);
intLi.Add(2);
intLi.Add(3);
intLi.Add(4);
intLi.Add(5);

foreach (int i in intLi)
{
if (i.Equals(2))
intLi.Remove(i);
}

這會引發一個Exception..

集合已修改; 列舉作業可能尚未執行。

我一開始的解決方法是..

List<int> intLi = new List<int>();
intLi.Add(1);
intLi.Add(2);
intLi.Add(3);
intLi.Add(4);
intLi.Add(5);

List<int> listTemp = new List<int>();
foreach (int i in intLi)
{
if (i.Equals(2))
listTemp.Add(i);
}

foreach (int i in listTemp)
{
intLi.Remove(i);
}

可是看起來感覺很遜..Confused..google一下..別人提供的方法好多了..Thumbs-up..

List<int> intLi = new List<int>();
intLi.Add(1);
intLi.Add(2);
intLi.Add(3);
intLi.Add(4);
intLi.Add(5);

for (int i = intLi.Count - 1; i >= 0; i--)
{
if (intLi[i].Equals(2))
intLi.Remove(i);
}

如果有人有更好的方法..歡迎提供阿..Vampire BatVampire BatVampire BatVampire BatVampire BatVampire BatVampire Bat..

5 則留言:

提到...

for (int i = 0; i < intLi.Count; i++)
if (intLi[i]==2)
intLi.RemoveAt(i);

提到...

while (myList.Contains(2))
{
myList.Remove(2);
}

Bibby 提到...

感謝大家的解法阿..^^..都很厲害..哈..

Laneser 提到...

List<int> list = new List<int>(new int[] {1,2,3,4,5});

list.RemoveAll(i => i == 2);

匿名 提到...
網誌管理員已經移除這則留言。