Windows Phone 8.1 比较 Control.Content 给出错误结果
Windows Phone 8.1 comparing Control.Content giving wrong result
我遇到了一个非常奇怪的问题我有以下代码:
for (int i = 0; i < Board.Length - 2; i++)
{
var a = Board[i].Content;
var b = Board[i + 1].Content;
var c = Board[i + 2].Content;
if (a == b && a == c &&
(string) a != string.Empty && a != null)
{
MessageDialog msd = new MessageDialog("test");
await msd.ShowAsync();
}
}
其中 Board
是一个按钮数组,a、b、c 的值相同,均为“1”。但是,在 if 语句中比较它们时,它们都给出 false 吗?我检查字符串是否为空或 null 的其他语句给出的值为 true。
您正在执行引用相等比较而不是值相等比较。您的代码等同于以下内容:
for (int i = 0; i < Board.Length - 2; i++)
{
object a = Board[i].Content;
object b = Board[i + 1].Content;
object c = Board[i + 2].Content;
if (a == b && a == c &&
(string) a != string.Empty && a != null)
{
MessageDialog msd = new MessageDialog("test");
await msd.ShowAsync();
}
}
这意味着 a == b
被解析为 <object> == <object>
而不是 <string> == <string>
,这导致比较等同于 Object.ReferenceEquals(a, b)
。要获得值相等,您应该立即转换 a
、b
和 c
。现在 a
是一个字符串,您还可以使用 String.IsNullOrEmpty
而不是手动检查两者:
for (int i = 0; i < Board.Length - 2; i++)
{
string a = (string)Board[i].Content;
string b = (string)Board[i + 1].Content;
string c = (string)Board[i + 2].Content;
if (a == b && a == c && !String.IsNullOrEmpty(a))
{
MessageDialog msd = new MessageDialog("test");
await msd.ShowAsync();
}
}
我遇到了一个非常奇怪的问题我有以下代码:
for (int i = 0; i < Board.Length - 2; i++)
{
var a = Board[i].Content;
var b = Board[i + 1].Content;
var c = Board[i + 2].Content;
if (a == b && a == c &&
(string) a != string.Empty && a != null)
{
MessageDialog msd = new MessageDialog("test");
await msd.ShowAsync();
}
}
其中 Board
是一个按钮数组,a、b、c 的值相同,均为“1”。但是,在 if 语句中比较它们时,它们都给出 false 吗?我检查字符串是否为空或 null 的其他语句给出的值为 true。
您正在执行引用相等比较而不是值相等比较。您的代码等同于以下内容:
for (int i = 0; i < Board.Length - 2; i++)
{
object a = Board[i].Content;
object b = Board[i + 1].Content;
object c = Board[i + 2].Content;
if (a == b && a == c &&
(string) a != string.Empty && a != null)
{
MessageDialog msd = new MessageDialog("test");
await msd.ShowAsync();
}
}
这意味着 a == b
被解析为 <object> == <object>
而不是 <string> == <string>
,这导致比较等同于 Object.ReferenceEquals(a, b)
。要获得值相等,您应该立即转换 a
、b
和 c
。现在 a
是一个字符串,您还可以使用 String.IsNullOrEmpty
而不是手动检查两者:
for (int i = 0; i < Board.Length - 2; i++)
{
string a = (string)Board[i].Content;
string b = (string)Board[i + 1].Content;
string c = (string)Board[i + 2].Content;
if (a == b && a == c && !String.IsNullOrEmpty(a))
{
MessageDialog msd = new MessageDialog("test");
await msd.ShowAsync();
}
}