【问题标题】:Comparing two lists with one list being user input always triggering flag将两个列表与一个列表作为用户输入进行比较总是触发标志
【发布时间】:2019-06-20 06:24:47
【问题描述】:

我正在尝试在 Windows 窗体应用程序上创建一个游戏,以使用非常简单的规则进行练习。创建一个随机混乱的字母,用户尝试在时间用完之前将其输入。当我比较这两个列表时,我遇到了一个问题。它总是触发我的 GameOver bool,即使我确定我输入的是相同的。

public static void CheckGameOver()
    {
        if (code != Player.inputList)
        {
            GameOver = true;
        }
    }

private void button1_Click(object sender, EventArgs e)
    {
        timeLeft.Stop();
        Player.inputList = userText.Text.ToList();
        Game.CheckGameOver();
        if (Game.GameOver == true)
        {
            this.Close();
            GameOverByInput gameOverByInput = new GameOverByInput();
            gameOverByInput.Show();
        }
        else if (Game.GameOver == false && Game.Level < 16)
        {
            this.Close();
            Game.WinRound();
            InbetweenLevels inbetweenLevels = new InbetweenLevels();
            inbetweenLevels.Show();
        }
        else
        {
            this.Hide();
        }
    }

我认为我对Player.inputList = userText.Text.ToList(); 的理解可能存在缺陷,这就是导致问题的原因。如果需要更多信息,我会提供。

【问题讨论】:

  • 一个minimal reproducible example(包括如何声明和分配code)会很棒。
  • @TheGeneral 我这么认为?抱歉,我对编程还是很陌生。当我通过将 Player.inputList 打印到标签框来检查它时,它确实显示了用户输入的内容。
  • 何时何地分配了代码,传递了哪些值?

标签: c# operators


【解决方案1】:

如果您要比较两个列表,而它们都可以具有相同的元素,那么您是在比较代码中的两个单独的引用

这意味着它们是不同的,因此,满足将 GameOver 标志设置为 true 的条件

您有很多选项可以进行比较,以更好地满足您的需求。

  1. 您可以比较列表具有相同数量的成员,然后迭代并按索引比较每个列表的元素,这意味着您将代码列表的第一个元素与 Player.inputList 的第一个元素进行比较,依此类推,如果您遍历所有元素并且满足条件,则 这些列表包含相同的信息,因此, 可以认为是同一个列表。 (您也可以使用Enumerable.SequenceEqual 来实现相同的行为)

  2. 不要使用列表来保存值,而是对代码变量和 player.inputList 使用 字符串,然后在比较字符串时比较这两个字符串(通过 ==或 .Equals 方法)比较将评估每个字符串是否包含相同的信息(已编写字符串引用类型以执行此比较,而不是评估每个字符串是否指向相同的引用),如果您将一个字符串与另一个字符串进行比较字符串并且它们包含相同的文本或字符,比较将返回 true 以表明字符串相等

这些只是冰山一角,您还有很多方法可以检查相等性,我建议您搜索 dotnetperls 并阅读它的每一篇文章,这可能有助于您更好地理解为什么您的比较没有按预期工作它到。

【讨论】:

  • 将根据您的见解进行更新,它们非常好,我对字符串类型的措辞不是最好的
  • 谢谢!我让它与第一个选项一起工作。我会查看你告诉我的那个资源,然后试着让它按照我最初的计划工作,只是为了迎接挑战
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
相关资源
最近更新 更多