可能的意外参考比较

use*_*963 27 c#

我有以下代码,它会发出警告

可能的意外参考比较; 要获得值比较,请将左侧投射到"string"类型

if (lblStatus.Content == "ACTIVE")
{
  //Do stuff
}
else
{
  //Do other Stuff
}
Run Code Online (Sandbox Code Playgroud)

我假设警告是因为lblStatus.Content可能不一定总是字符串类型?

我已尝试使用以下各项修复它,但我仍然收到警告

if (lblStatus.Content.ToString() == "ACTIVE")
if ((string)lblStatus.Content == "ACTIVE")
if (lblStatus.Content === "ACTIVE")
Run Code Online (Sandbox Code Playgroud)

请问有人可以解释一下我仍然会收到警告的原因以及解决此问题的最佳实用方法吗?

Jon*_*eet 59

警告是因为编译时类型lblStatus.Contentobject.因此,运算符重载选择==(object, object)仅仅是参考标识比较的重载.这与值的执行时类型无关.

您的第一个或第二个选项应该已修复警告:

if (lblStatus.Content.ToString() == "ACTIVE")
if ((string)lblStatus.Content == "ACTIVE")
Run Code Online (Sandbox Code Playgroud)

请注意,如果lblStatus.Content为null ,则第一个将抛出异常.我更喜欢第二种形式.

如果您认为此时仍然看到警告,我怀疑您要么没有重建 - 或者您的构建中仍然存在"脏".完全重建绝对应该删除警告.

  • 如果你确定`Content`永远不会是一个不是字符串的对象(我想这就是这种情况),那么转换为`string`是最好的.否则,可以说`lblStatus.Content as string =="ACTIVE"`或检查`null`并执行`ToString()`其他东西(取决于那个人想要的东西). (4认同)
  • @Rawling:显然今天是多个拼写错误的日子:( (2认同)