1

这似乎应该是非常直截了当的。

如果我有:

object obj = *get value from somewhere*

if(obj == null){
    MessageBox.Show("NULL");
}

即使当我调试并看到 obj 为 null 时,代码也永远不会进入 if 语句。

在将对象与 null 进行比较时,您是否做了一些不同的事情?(因为对象可以是任何类型?)

4

2 回答 2

13

好的,评论放弃了:

好的,在执行此操作时,我注意到当我在调试模式下将鼠标悬停在变量上时,值为 null,但是当它 ISNT 工作时,值为 {null}... {null} 是什么意思?

这表明它实际上是一个包含单个空引用的数组(或可能是另一个集合类型),例如

object obj = new object[] { null };

的值obj不是空引用,因此它不会进入if语句的主体。

你应该如何处理这取决于你想要达到的目标。你真的需要 obj静态类型object吗?

于 2012-07-26T20:17:04.203 回答
10

你需要

if(obj == null){
    MessageBox.Show("NULL");
}

您编写了类型对象而不是变量obj

更新

根据您的编辑(这大大改变了问题),您的代码肯定可以工作。尝试分配

obj = null;

就在您的if语句之前,并看到它进入 MessageBox.Show()

这将证明if确实按您的预期工作。

更新 2

@Jon 击中了它,您可能已经分配了一个带有一个元素 null 的数组。它以这种方式显示的原因是调试器正在尝试可视化数组。

例如,如果数组有两个字符串元素“Hello”和“World”,调试器将显示

{“你好世界”}

由于数组只有一个元素 null,因此调试器将其可视化为

{空值}

于 2012-07-26T20:10:39.020 回答