Почему юнити жалуется на код?

Я пытаюсь перебрать список, но почему-то юнити выдает ошибку:

5fe4d23f8e3e6386004256.png

Вот место, где происходит ошибка:
foreach (int item in sv.ItsNum) //жалуется здесь 
        {
            Debug.Log(item);
            if(Num == item)
            {
                StartCoroutine(Skin());
            }
            else
            {
                sv.ItsNum.Add(Num);
                
            }
                
        }

думаю это из за foreach но не факт
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Нет, ему плохо от этого
sv.ItsNum.Add(Num);
Нельзя изменять коллекцию, которую вы перебираете. Если бы вы тупо перевели сообщение об ошибке, не пришлось бы вообще заводить топик.

PS
Да тут сам код с багой, чем длиннее массив, тем больше Нумов в него добавится. А так бы его можно было переписать на две строки с Linq.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Griboks
@Griboks Куратор тега C#
Думаю это из-за того, что "Collection was modified". Иными словами, вы перебираете и изменяете коллекцию одновременно. А шарп не хочет разбираться в ваших махинациях с коллекцией, поэтому отказывается работать и плюётся в вас ошибкой.

Для особо ленивых, есть секретный метод, который заставит шарп работать в этой каше. Надо всего лишь... подсунуть ему копию коллекции:
foreach (int item in sv.ItsNum.ToList()) //тупо копируем
        {
            Debug.Log(item);
            if(Num == item)
            {
                StartCoroutine(Skin());
            }
            else
            {
                sv.ItsNum.Add(Num);
                
            }
                
        }

Также следует обратить внимание, что тупо (и даже умно) копировать коллекцию не очень хорошо во всех смыслах.
Ответ написан
думаю это из за foreach но не факт

Вы правы.
Нельзя модифицировать лист, по которому вы сейчас итерируетесь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы