我从一个文本文件中读取。在该文本文件中,一行是YES或NO(如果是正确则为是,否则为否)
我在开头使用answer.Tag = "NO;"
然后当我按下按钮时answer.Tag = "YES";
我有一个验证按钮
if (answer[0].Tag == "bla bla" && answer[1].Tag== "blabla2")
{
MessageBox.Show("They Match");
}
else
MessageBox.Show("They don't");
然后我遇到了这个问题:警告1可能的意外参考比较;要获得值比较,请将左侧投射到“string”类型
我不知道为什么不进行比较。它会跳到其他地方
答案 0 :(得分:4)
Possible unintended reference comparison
就是这个:
answer[1].Tag == "blabla2"
Tag
是object
,您可以将其与"blabla2"
进行比较,因为string
是参考类型。编译器将string
“投射”到object
并执行参考比较(由于它们不是同一个对象,因此将评估为false
。)
要解决此问题,您必须在检查之前投射Tag
。与上面提到的修复一起,您的代码将成为
if (answer[0].Tag.ToString() == "bla bla" && answer[1].Tag.ToString() == "blabla2")
{
MessageBox.Show("They Match");
}
else
MessageBox.Show("They don't");
答案 1 :(得分:0)
更正您的代码:
if (answer[0].Tag == "bla bla" && answer[1].Tag== "blabla2")
{
MessageBox.Show("They Match");
}
else
MessageBox.Show("They don't");
这里特别是你的if条件:
if (answer[0].Tag **==** "bla bla" && answer[1].Tag== "blabla2")
应该是2个等号,而不是一个
答案 2 :(得分:0)
通常Tag
属性的类型为Object
,因此我假设它的类型为Object
。具有==
的{{1}}运算符用作参考比较(意味着将实例的引用与值进行比较)。
要修复它,只需将一个强制转换为字符串。
System.Object