32

我有以下代码发出警告

可能的意外参考比较;要进行值比较,请将左侧转换为类型“字符串”

if (lblStatus.Content == "ACTIVE")
{
  //Do stuff
}
else
{
  //Do other Stuff
}

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

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

if (lblStatus.Content.ToString() == "ACTIVE")
if ((string)lblStatus.Content == "ACTIVE")
if (lblStatus.Content === "ACTIVE")

请有人解释我仍然收到警告的原因以及处理这个问题的最佳实用方法吗?

4

3 回答 3

66

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

不过,您的第一个或第二个选项应该已经修复了警告:

if (lblStatus.Content.ToString() == "ACTIVE")
if ((string)lblStatus.Content == "ACTIVE")

lblStatus.Content请注意,如果为 null ,则其中的第一个将引发异常。我更喜欢第二种形式。

如果您认为此时您仍然看到警告,我怀疑您没有重建 - 或者您的构建中仍然“脏”的东西。完全重建绝对应该删除警告。

于 2012-09-04T12:45:46.863 回答
1

我更喜欢坚持这种string.Equals(string,string,StringComparison)方法,如下所示:

    string contentStr = (lblStatus.Content ?? string.Empty).ToString();
    if (string.Equals("ACTIVE", contentStr, StringComparison.OrdinalIgnoreCase))
    { 
        // stuff
    } 

因为它明确说明了它的作用+它没有给出你提到的警告。

于 2012-09-04T12:51:56.690 回答
-3

使用以下方法修复代码后重建项目:

if (lblStatus.Content.ToString() == "ACTIVE")
if ((string)lblStatus.Content == "ACTIVE")
if (lblStatus.Content === "ACTIVE")
于 2014-06-04T01:55:42.257 回答