-
유니티 for나 foreach에서 리스트 제거하기 / Unity Remove the List from For Foreach유니티 2023. 10. 16. 17:27
foreach내에서 Remove가 안되는 이유
List<int> nums; void Start() { nums = new List<int> { 1, 2, 3, 4 }; foreach (int num in nums) { nums.Remove(num); } }
리스트를 for나 foreach같은 반복문 내에서 Remove로 제거하려고 하면
InvalidOperationException: Collection was modified 으로 에러가 뜹니다.
foreach 문 안에서 순회하는 원본을 제거하면 안되는 건데요.
중간에 제거해버리면 리스트의 크기가 변하면서 인덱스가 앞으로 당겨와지기 때문입니다.
List<int> nums; void Start() { nums = new List<int> { 1, 2, 3, 4 }; List<int> removeNums = new(); foreach (var num in nums) { if (num == 2 || num == 3) removeNums.Add(num); } nums.RemoveAll(x => removeNums.Contains(x)); }
foreach 내에서 제거하고 싶은 것만 지울 리스트에 담아둔 뒤 RemoveAll로 한꺼번에 제거합니다.
'유니티' 카테고리의 다른 글