Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 空不等于空?_C#_.net - Fatal编程技术网

C# 空不等于空?

C# 空不等于空?,c#,.net,C#,.net,以下代码 if (_LastMouseClickArea != null) { if (_LastMouseClickArea.GridItem == GridItem.DataCell) {... 失败,因为\u LastMouseClickArea为空。我知道这听起来很傻,所以我来了 从即时窗口: _LastMouseClickArea != null true _LastMouseClickArea nul

以下代码

        if (_LastMouseClickArea != null)
        {
            if (_LastMouseClickArea.GridItem == GridItem.DataCell)
            {...
失败,因为
\u LastMouseClickArea
为空。我知道这听起来很傻,所以我来了

从即时窗口:

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

什么会导致这种行为

你可能有比赛条件吗?就像在你检查时它不是空的,但是在你能够使用它之前,一个线程将它设置为空。

解决方案:在提交之前,我记得做一些橡皮鸭调试。这让我检查了
==
是如何实现的,而且,果然有一些奇怪的P/Invoke调用,其
null!=空
等于


因此,如果有人遇到同样的问题,这里是供将来参考的。

可以回答您自己的问题,但这不是合适的格式。这里是否有一个开放的问题?请从问题中删除解决方案,并将其作为更详细的答案发布。您一定在做其他事情,因为
null==null
总是给我带来积极的结果。@ChrisF我会按照您的建议去做。是否可能在您的代码库中的某个地方运算符==是否已被重写?执行此调用不应该是P/Invoking。我看到了一个模式,你检查Nan!=Nan,因为这是一个硬件加速调用,但不适用于空引用。Null==Null将在默认的C#实现中返回true。执行的P/Invoke调用是什么?@Spence沿着
返回CPINVOKE.GridArea_eq(CValueType.getCPtr(lhs),CValueType.getCPtr(rhs))的思路