c# - 尝试检查 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();
}
我希望检查真实的输出,以便游戏完成。
解决方案
System.Char
是一个ValueType
。因此,当您将其强制转换为System.Object
CLR 时,会创建此对象的副本并将其存储在托管堆上。这种方法称为拳击。(在 MSDN 上阅读更多信息:https ://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/boxing-and-unboxing )。
所以,你有两个不同的实例System.Object
:第一个存储在Button.Content
属性中,第二个是通过强制转换获得的。然后将==
运算符应用于这些实例。当它发生时,CLR 会尝试比较操作数的引用。但是正如我已经说过的,你有两个不同的对象,所以,正如预期的那样,它的引用是不相等的。这就是你得到false
结果的原因。
为了解决您的问题,我建议您尝试转换Button.Content
为System.Char
,反之亦然。或者使用System.String
而不是System.Char
作为按钮的内容。因为System.String
是引用类型。
推荐阅读
- http - Why is my port forwarding not working?
- android - Not able to access localhost on android device on the same network
- drupal-8 - Day and month name translation in Drupal8
- sql - 如何将多个sql行连接成一行
- ios - 如何构建一个按钮来单独控制计时器并在标签中显示倒计时?
- javascript - 你如何在反应路线内路由
- python - 无法获取英文搜索结果
- ms-access - 在 Access VBA 中,有没有办法计算和引用当前在主窗口中打开的对象?
- flowtype - 使用 flowtype 键入函数对象
- pharo - 如何在 Pharo 6.1 中连接 SQL Server 数据库?