2014-10-31 9 views
2

Может ли кто-нибудь представить какие-либо идеи, почему мой нулевой чек неправильно оценивается?null == null возвращает false?

Следует также указать, что если i не является нулевым, оценка правильная. Я не уверен, что еще нужно, но дайте мне знать, какие другие детали мне нужно предоставить.

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

+0

@BradleyDotNET, после очистки и восстановления, странное поведение сохраняется. –

+6

Есть ли какая-либо специальная перегрузка оператора, определенная для '=='? Что возвращает 'Object.Equals (i, null)'? Пожалуйста, покажите определение класса/структуры для 'i'. –

ответ

6

Я предполагаю, что вы перегрузили оператора ==. Результат Object.Equals(i, null) может подтвердить это.

Если вы перегружаете оператора ==, возможно, ваша логика неправильно обрабатывает корпус null.

+1

Ты испугался, увидев мой комментарий :). +1 хороший улов. – Rahul

0

Один [коварный] способ получить это произошло бы: -

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

Если вы назначаете [email protected] к i вы получите значение часов, которые вы показать.

enter image description here

Что такое тип i? Либо он отображается в отладчике как null, либо вы сделали что-то еще в этом классе, что может привести к ошибке ==.

+1

Примечание для себя; delete * any *, который когда-либо выглядит. Поговорите о жесткой ошибке, чтобы найти. – BradleyDotNET

+1

Да, Натан должен опубликовать свой комментарий в качестве ответа. –

Смежные вопросы