比较两个列表,其中一个列表是用户输入,始终会触发标志

时间:2019-06-20 06:24:47

标签: c# operators

我正在尝试在Windows窗体应用程序上创建游戏,以便使用非常简单的规则进行练习。将创建一个随机的字母混杂,用户尝试在时间用完之前将其键入。我在比较两个列表时遇到问题。即使我确保输入相同的内容,它始终会触发我的GameOver布尔值。

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();的理解可能存在缺陷,这就是导致问题的原因。如果需要更多信息,我会提供。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

这些只是冰山一角,您可以使用更多方法检查是否相等,我建议您搜索dotnetperls并阅读其中的所有文章,这可能有助于您更好地理解为什么比较无法按预期进行来。