在foreach中 Remove 删除元素时,每一次删除都会导致集合的大小和元素索引值发生变化,会导致在foreach中删除元素会出现异常。
原因很简单。有些集合,比如List或者字典等,如果你在循环过程中如果判断符合条件后进行:删除或修改子项,那么就会出现这个异常。
注意遍历的时候不要用foreach,而是用for循环从尾到头遍历,否则一旦删除后索引长度改变,会导致死循环或者索引超出长度的异常。
正确示例:
private void ListTest()
{
List replyList = new List() {4, 5};
List origialList = new List() {1, 4, 5, 6};
foreach (var reply in replyList)
{
for (int j = origialList.Count - 1; j >= 0; j--)
{
if (origialList[j] == reply)
{
origialList.Remove(origialList[j]);
origialList.Add(reply);
}
}
}
foreach (var curNum in origialList)
{
Debug.Log("============Test: " + curNum);
}
}
C#遍历List并删除某个或者几个元素的方法 - fire909090 - 博客园