Word Puzzle - InvalidOperationException - PullRequest
0 голосов
/ 24 октября 2019

Если бы кто-то мог сказать мне, что я делаю не так, я был бы очень благодарен!

По сути, у меня есть загадка со словом. Игрок может выбрать из списка букв, а затем отправить их, чтобы увидеть, соответствует ли оно слову на доске или нет. Вот что происходит, прежде чем мы получим этот код:

  1. Игрок нажимает кнопку с прикрепленной буквой (тип символа)
  2. символ отправляется в этот скрипт и добавляется в список
  3. Когда игрок отправляет больше букв, список символов увеличивается.
  4. Я проверяю, совпадают ли буквы в другом списке

Если список символовсопоставить строку в списке «wordsToFind», затем я хочу удалить буквы из указанного списка и поместить слово в другой список «foundWords» .... Повторять этот процесс, пока игрок не найдет все слова и не превзойдет уровень. Все, казалось, работало просто отлично, пока я не начал удалять отправленные письма .... Из инспектора все выглядит отлично, я наблюдаю, как буквы добавляются, я вижу, что они соответствуют слову, буквы затем удаляются и такслово. Не видел такого типа ошибки раньше, так что извините, если это просто. Вот этот код:

private const int maxLetters = 6;
public List<char> submittedLetters = new List<char>(maxLetters);

public List<string> wordsToFind = new List<string>();
public List<string> wordsFound = new List<string>();

/// <summary>
/// Update is called once per frame
/// </summary>
private void Update() {

    ProcessLetters();
}

/// <summary>
/// Handles all letters being submitted and processes them
/// </summary>
private void ProcessLetters() {

    if(submittedLetters.Count == 0) { return; }

    string tempWord = null;
    foreach (char letter in submittedLetters) {

        if (wordsFound.Count >= 1) {

            submittedLetters.Remove(letter);
        }

        tempWord += letter.ToString();
        foreach (string word in wordsToFind) {

            if (tempWord == word.ToUpper()) {

                wordsFound.Add(tempWord);
                wordsToFind.Remove(tempWord);
            }
        }
    }
}

1 Ответ

0 голосов
/ 24 октября 2019

Ну, вы не можете изменить список, пока итерируете его. Ваша строка:

wordsToFind.Remove(tempWord);

будет работать нормально, но после этого, так как список изменен, он не может выполнить итерацию по нему и выдает исключение InvalidOperationException.

См. Этот ответ, чтобы исправить это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...