null == null返回false?

时间:2014-10-31 00:46:19

标签: c# visual-studio-2013 .net-4.0

任何人都可以提供任何想法,为什么我的空检查评估不正确吗?

还应该指出,如果我不为空,则评估是正确的。我不确定还有什么相关内容,但让我知道我需要提供的其他细节。

foreach (var item in selectedItems)
{
    var i = inspectionItems.Keys.SingleOrDefault(x => x.InspectionItemId == item.InspectionItemId);
    if (i != null)
    {
        // Process i
     }
     else
     {
       // create
     }
}

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:6)

我的猜测是你重载==运算符。 Object.Equals(i, null)的结果可以证实这一点。

如果您使==运算符超载,则可能是您的逻辑错误地处理null情况。

答案 1 :(得分:0)

实现这一目标的一种[狡猾]方式是: -

    public enum Cheat
    {
        @null = 0,
        foo = 1,
        bar = 2
    }

如果您将Cheat.@null分配给i,则会获得您显示的观看值。

enter image description here

i的类型是什么?它在调试器中显示为null,或者您在该类中执行了其他可能导致==失败的内容。