2014-10-31 240 views
2

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

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

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

不要问明显;但是你有没有清理和重建,所以没有任何奇怪的调试符号遗留下来?这种行为似乎很奇怪。 – BradleyDotNET 2014-10-31 00:47:44

+0

@BradleyDotNET,清理并重建后,奇怪的行为仍然存在。 – 2014-10-31 00:50:25

+6

是否为'=='定义了一些特殊的运算符重载? Object.Equals(i,null)返回什么?请显示'i'的类/结构定义。 – 2014-10-31 00:55:32

回答

6

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

如果您将==运算符超载,则可能是您的逻辑错误地处理了null大小写。

+1

你看到我的评论吓到了:)。尽管一个不错的接收。 – Rahul 2014-10-31 01:06:46

0

一个[迂回]的方式来获得这种情况发生将是: -

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

如果您分配[email protected]i你拿到手表值你显示。

enter image description here

什么是i类型?要么它在调试器中显示为null,要么您在该类中执行了其他操作,可能会导致==失败。

+1

注意自我;删除任何看起来像这样的代码。谈论一个难找的问题。 – BradleyDotNET 2014-10-31 01:02:11

+1

是的,内森应该发表他的评论作为答案。 – 2014-10-31 01:02:12