这似乎应该是非常直截了当的。
如果我有:
object obj = *get value from somewhere*
if(obj == null){
MessageBox.Show("NULL");
}
即使当我调试并看到 obj 为 null 时,代码也永远不会进入 if 语句。
在将对象与 null 进行比较时,您是否做了一些不同的事情?(因为对象可以是任何类型?)
好的,评论放弃了:
好的,在执行此操作时,我注意到当我在调试模式下将鼠标悬停在变量上时,值为 null,但是当它 ISNT 工作时,值为 {null}... {null} 是什么意思?
这表明它实际上是一个包含单个空引用的数组(或可能是另一个集合类型),例如
object obj = new object[] { null };
的值obj
不是空引用,因此它不会进入if
语句的主体。
你应该如何处理这取决于你想要达到的目标。你真的需要 obj
静态类型object
吗?
你需要
if(obj == null){
MessageBox.Show("NULL");
}
您编写了类型对象而不是变量obj
更新
根据您的编辑(这大大改变了问题),您的代码肯定可以工作。尝试分配
obj = null;
就在您的if语句之前,并看到它进入 MessageBox.Show()
这将证明if确实按您的预期工作。
更新 2
@Jon 击中了它,您可能已经分配了一个带有一个元素 null 的数组。它以这种方式显示的原因是调试器正在尝试可视化数组。
例如,如果数组有两个字符串元素“Hello”和“World”,调试器将显示
{“你好世界”}
由于数组只有一个元素 null,因此调试器将其可视化为
{空值}