警告 1 可能的意外参考比较;若要获取值比较,请将左侧转换为键入 'string'



我从一个文本文件中读取。在该文本文件中,一行带有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");
}

最新更新