我从一个文本文件中读取。在该文本文件中,一行带有YES或NO(如果正确则为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"
我不知道为什么它不做比较。它跳到else
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");
对代码的更正:
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个等号,而不是一个
通常Tag
属性的类型为Object
,所以我假设它的类型为Object
。CCD_ 15操作符和CCD_ 16作为参考比较(意味着实例的引用比值的引用要多)。
要修复它,只需向字符串引入强制转换。
if ((string)answer[0].Tag == "bla bla" && (string)answer[1].Tag== "blabla2")
{
MessageBox.Show("They Match");
}
else
{
MessageBox.Show("They don't");
}