(Unity) foreach Error
포스트
취소

(Unity) foreach Error

Error : InvalidOperationException: Collection was modified; enumeration operation may not execute.

팝업창들을 관리하기 위해 전체삭제를 구현하는 중 foreach에서 에러가 났다.

이유는 간단했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
List<GameObject> popupList = new List<GameObject>();

void ClosePopup(GameObject go)
{
    popupList.Remove(go);
    Destroy(go);
}

void CloseAllPopup()
{
    foreach(GameObject go in popupList)
    {
        ClosePopup(go);
    }
}


다음 코드에서 에러가 나는 이유는 foreach에서 popupList안에 있는 요소들을 전체 불러오는데

반복문을 실행하는 중 popupList의 요소가 삭제됐기 때문에 에러가 일어난 것이다.

그래서 다음과 같이 코드를 수정해줬다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
List<GameObject> popupList = new List<GameObject>();

void ClosePopup(GameObject go)
{
    Destroy(go);
}

void CloseAllPopup()
{
    foreach(GameObject go in popupList)
    {
        ClosePopup(go);
    }

    popupList.Clear();
}


💡 참고

루덴의 지식 블로그: foreach 에러

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.