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

C# 比较两个列表,其中一个列表为用户输入始终触发标志,c#,operators,C#,Operators,我正在尝试在windows窗体应用程序上创建一个游戏,用非常简单的规则进行练习。创建了一个随机混杂的字母,用户试图在时间用完之前将其键入。当我比较这两个列表时,我遇到了一个问题。它总是通过bool触发我的游戏,即使我确保输入了相同的内容 public static void CheckGameOver() { if (code != Player.inputList) { GameOver = true; }

我正在尝试在windows窗体应用程序上创建一个游戏,用非常简单的规则进行练习。创建了一个随机混杂的字母,用户试图在时间用完之前将其键入。当我比较这两个列表时,我遇到了一个问题。它总是通过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();
        }
    }
publicstaticvoidcheckgameover()
{
if(代码!=Player.inputList)
{
GameOver=true;
}
}
私有无效按钮1\u单击(对象发送者,事件参数e)
{
timeLeft.Stop();
Player.inputList=userText.Text.ToList();
Game.CheckGameOver();
如果(Game.GameOver==true)
{
这个。关闭();
GAMEOVERBAINPUT GAMEOVERBAINPUT=新GAMEOVERBAINPUT();
gameoverweinput.Show();
}
else if(Game.GameOver==false&&Game.Level<16)
{
这个。关闭();
Game.WinRound();
中间层中间层中间层=新中间层();
中间层。显示();
}
其他的
{
this.Hide();
}
}

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

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

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

您有许多选择来进行比较,以更好地满足您的需求

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

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


  • 这些只是冰山一角,你有更多的方法来检查平等性,我建议你搜索dotnetperls并阅读它的每一篇文章,这可能会帮助你更好地理解为什么你的比较没有像你期望的那样有效。

    A(包括
    code
    是如何声明和分配的)太棒了。@TheGeneral我想是的?对不起,我对编程还是很陌生。当我通过打印到标签框来检查Player.inputList中的内容时,它确实显示了用户键入的内容。代码何时何地被命名,哪些值被传递到它上?将随您的见解而更新,它们真的很好,我对字符串类型的措辞不是最好的谢谢!我用第一个选项就可以了。我会检查一下你告诉我的资源,然后试着让它按照我最初的计划工作,只是为了迎接挑战