警告1可能的非预期参考比较;得到一个值比较,左侧输入'string'

时间:2013-12-02 12:23:39

标签: c# winforms

我从一个文本文件中读取。在该文本文件中,一行是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”类型

我不知道为什么不进行比较。它会跳到其他地方

3 个答案:

答案 0 :(得分:4)

Possible unintended reference comparison就是这个:

answer[1].Tag == "blabla2"

Tagobject,您可以将其与"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