Null不是null?

时间:2012-04-26 13:24:00

标签: c# .net

以下代码

        if (_LastMouseClickArea != null)
        {
            if (_LastMouseClickArea.GridItem == GridItem.DataCell)
            {...

失败,因为_LastMouseClickArea为空。我知道这听起来很傻,所以我来到这里。

从即时窗口:

_LastMouseClickArea != null
true
_LastMouseClickArea 
null
_LastMouseClickArea == null
false
_LastMouseClickArea.GetType()
'((object)(this._LastMouseClickArea))' is null

什么可能导致这种行为?

2 个答案:

答案 0 :(得分:2)

你有没有竞争条件?因为在检查时它不是null,但是在你能够使用它之前,线程将它设置为null。

答案 1 :(得分:1)

解决方案:在提交之前,我记得做一些Rubber Duck调试。这导致我检查==的实现方式,当然,还有一些奇怪的P / Invoke调用null != null等于true

所以在这里,如果有人遇到同样的问题,以供将来参考。