我正在尝试在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();
的理解可能存在缺陷,这就是导致问题的原因。如果需要更多信息,我会提供。
答案 0 :(得分:1)
如果您要比较两个列表,而它们都可以具有相同的元素,则您要在代码中比较两个单独的引用。
这意味着它们不同,因此,满足您将GameOver标志设置为true的条件。
您有很多选择可以进行比较,以更好地满足您的需求。
您可以比较列表具有相同数量的成员,然后,按索引迭代和比较每个列表的元素,这意味着您将代码列表的第一个元素与Player.inputList的第一个元素进行比较,依此类推,如果您遍历所有元素并且满足条件,则列表包含相同的信息,因此,可以视为同一列表。 (您也可以使用Enumerable.SequenceEqual来实现相同的行为)
不是使用列表来保存值,而是将字符串用于代码变量和player.inputList ,然后在比较字符串时比较这两个字符串(通过==或.Equals方法),如果您将一个字符串与另一个字符串进行比较,则比较将评估每个字符串是否包含相同的信息(已编写了字符串引用类型以执行此比较,而不是评估每个字符串是否指向相同的引用)。字符串,并且它们包含相同的文本或字符,比较将返回true以显示字符串相等。
这些只是冰山一角,您可以使用更多方法检查是否相等,我建议您搜索dotnetperls并阅读其中的所有文章,这可能有助于您更好地理解为什么比较无法按预期进行来。