首页 > 解决方案 > 尝试检查 Button.Content.Inputs 是否为真(井字游戏简单游戏)

问题描述

我正在创建井字游戏简单的游戏,一切正常,直到检查按钮内容并且我遇到了一个问题:

即使按钮有正确的内容,它也总是返回 false。

我试图同时更改为字符串(内容和'x'或'0')-不起作用按钮。内容应该是对象

if ((buttons[0].Content == (object)'x' || buttons[0].Content==(object)'0') &&(buttons[3].Content == (object)'x' || buttons[3].Content == (object)'0')
               && (buttons[6].Content == (object)'x' || buttons[6].Content == (object)'0'))
            {
                MessageBox.Show("You have won", "Tic-tac-toe");
                this.Close();
            }

我希望检查真实的输出,以便游戏完成。

标签: c#wpf

解决方案


System.Char是一个ValueType。因此,当您将其强制转换为System.ObjectCLR 时,会创建此对象的副本并将其存储在托管堆上。这种方法称为拳击。(在 MSDN 上阅读更多信息:https ://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/boxing-and-unboxing )。

所以,你有两个不同的实例System.Object:第一个存储在Button.Content属性中,第二个是通过强制转换获得的。然后将==运算符应用于这些实例。当它发生时,CLR 会尝试比较操作数的引用。但是正如我已经说过的,你有两个不同的对象,所以,正如预期的那样,它的引用是不相等的。这就是你得到false结果的原因。

为了解决您的问题,我建议您尝试转换Button.ContentSystem.Char,反之亦然。或者使用System.String而不是System.Char作为按钮的内容。因为System.String是引用类型。


推荐阅读