首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字谜- InvalidOperationException

字谜- InvalidOperationException
EN

Stack Overflow用户
提问于 2019-10-24 05:39:11
回答 1查看 38关注 0票数 0

如果有人能告诉我我做错了什么,我会非常感激的!

基本上我有一个字谜。玩家可以从一个字母列表中挑选,然后提交它们,看看它是否与黑板上的单词匹配。这就是在我们进入这个代码之前所发生的事情:

  1. Player单击带有附加字母(字符类型)的按钮,将字符发送到此脚本,并添加到列表
  2. 中,当播放器提交更多字母时,字符列表变得更大,
  3. ,我正在检查字符是否等于另一个列表

中的单词

如果字符列表与"wordsToFind“列表中的字符串匹配,那么我希望从所述列表中删除字母,并将该单词放入另一个名为"foundWords"....Repeating进程的列表中,直到player找到所有单词并击败该级别为止。一切似乎都很顺利,直到我开始删除提交的信件.从检验员看来一切都很好,我看着字母被添加,我看到它与单词匹配,然后这些字母被移除,单词也是如此。以前没有见过这种类型的错误,很抱歉,如果这很简单。下面是所讨论的代码:

代码语言:javascript
复制
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);
            }
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-10-24 05:48:24

您不能在迭代列表的同时修改它。你的台词:

代码语言:javascript
复制
wordsToFind.Remove(tempWord);

会运行得很好,但是在那之后,由于列表被修改了,所以它不能在上面迭代并抛出InvalidOperationException。

See this answer to fix this

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58534773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档