보통 foreach문에서 해당 컬렉션을 읽는 도중 수정을 시도할 시 발생하는 에러이다.
수정전:
foreach (TMP_InputField input in list)
{
if (input == null) { list.Remove(input); continue; }
inputDict.Add(input.transform.name, input);
}
첫번 째 수정:
for (int i = 0 ; i < list.Count ; i++)
{
TMP_InputField input = list[i];
if (input == null) { list.RemoveAt(i); continue; }
inputDict.Add(input.transform.name, input);
}
하지만 이렇게 작성하면 문제가 발생 할 수 있음.
제거된 요소가 있을 경우, 그 다음 요소 부터 앞으로 한칸씩 당겨지므로 검사를 건너뛰는 요소가 발생하게 된다.
두번째 수정:
int count = list.Count;
for (int i = count - 1; i >= 0 ; i--)
{
TMP_InputField input = list[i];
if (input == null) { list.RemoveAt(i); continue; }
inputDict.Add(input.transform.name, input);
}
이렇게 수정하면 요소가 제거될 때마다 count 값이 달라지지도 않고, 뒤부터 검사하므로 한칸씩 당겨지더라도 검사를 건너뛰는 요소가 발생하지 않게 된다.
'유니티(Unity)' 카테고리의 다른 글
라이트맵 런타임 Import 주의할 점 (0) | 2024.03.26 |
---|---|
Unity Android 빌드 시 라이트맵 어두움 (0) | 2024.03.16 |
다중 스레드에서 딕셔너리 동시 접근시 에러 (0) | 2024.01.26 |
Array,List,Dictionary 참조 변경 (0) | 2024.01.22 |
Unity D3D11 에러 해결방법 (0) | 2023.12.11 |