Как может if() неправильно оцениваться в C#

У меня простая логика.

int i = 0;
if (i < 0) { 
  //whatever; 
}

Когда я отлаживаю с помощью VS, я вижу, что i установлено в 0, НО if оценивается как false! Как это может быть?

РЕБЯТА. Возможно, я мог бы сформулировать это лучше!!! Вышеупомянутое выражение ДОЛЖНО оцениваться как ложное, когда я равен 0, что я вижу, когда навожу курсор на него в VS, НО оно попадает в скобки и делает «все, что угодно»... ЧТО неправильно.

EDIT: См. мой похожий, но более свежий вопрос для решения.


person ManInMoon    schedule 17.06.2011    source источник
comment
0 не меньше 0   -  person DHall    schedule 17.06.2011
comment
Простая логика недостаточно проста.   -  person Justin Niessner    schedule 17.06.2011
comment
Этот вопрос побьет рекорд по количеству опубликованных семантически идентичных ответов.   -  person razlebe    schedule 17.06.2011
comment
Однако я думаю, что голосование по понижению - это жестко. Вопрос хорошо задан, и ОП попытался выяснить это с помощью своего отладчика. Он просто не понял первопричину бага, и это нормально.   -  person razlebe    schedule 17.06.2011
comment
Относительно редактирования: опубликованный код не будет выполнять whatever. Так что есть еще одно заблуждение / неправильное прочтение.   -  person Henk Holterman    schedule 17.06.2011
comment
@raz - Хорошо спросил? Ты серьезно? Он совершенно не смог объяснить, в чем была настоящая проблема.   -  person Brad Mace    schedule 18.06.2011
comment
@bemace Это был глупый вопрос, но совершенно ясно, о чем он спрашивал.   -  person razlebe    schedule 18.06.2011
comment
@bemace А, извини. Я только что видел редактирование, которое полностью изменило вопрос с момента моего комментария выше. Теперь это достойно отрицательного голоса.   -  person razlebe    schedule 18.06.2011
comment
bernace - почему глупый вопрос? У меня ошибка. Я дал простой кусок кода, чтобы объяснить проблему. Я НИКОГДА не видел, чтобы VS делал что-то подобное раньше. Я думаю, вы могли бы быть легкомысленным вместо того, чтобы помочь мне.   -  person ManInMoon    schedule 18.06.2011
comment
Хенк, ты прав в том, что все не должно выполняться. ОДНАКО - бывает! Это моя проблема! Очевидно, что-то гораздо более тонкое идет не так, и я пришел на этот сайт, чтобы получить серьезную помощь.   -  person ManInMoon    schedule 18.06.2011
comment
@ManInMoon: Вы пробовали все обычные вещи, выполняя чистые сборки и т. д.?   -  person forsvarir    schedule 18.06.2011
comment
Да и полная перезагрузка. Это очень странно. Теперь я вставил множество строк журнала и просматриваю код - некоторые из строк журнала (Console.Writelines) пропущены!   -  person ManInMoon    schedule 18.06.2011
comment
Если вы хотите, чтобы это снова открылось, возможно, отредактируйте свой вопрос?   -  person Tim Post♦    schedule 19.06.2011


Ответы (10)


0 не меньше 0. Равно. Сделать if (i <= 0)

person Ian Dallas    schedule 17.06.2011

Это потому, что 0 ‹ 0 ложно.

person R. Martinho Fernandes    schedule 17.06.2011

Потому что i не меньше нуля. Итак, выражение оценивается как ложное, что правильно.

person TheGeekYouNeed    schedule 17.06.2011

0 НЕ меньше 0. меньше ИЛИ РАВНО 0

person iliaden    schedule 17.06.2011
comment
В яблочко. Поэтому он НЕ должен делать все правильно? Но моя делает... - person ManInMoon; 17.06.2011
comment
@ManInMoon: Так почему вы сказали, что это оценивается как ложное? - person Jon Skeet; 17.06.2011
comment
Извините, Джон, моя формулировка была неясной - я отредактировал ее сейчас. - person ManInMoon; 17.06.2011

Он оценивается как false, потому что 0 не меньше 0.

person mfanto    schedule 17.06.2011

Ответ: потому что i не меньше 0.

Чтобы оператор if оценивался как истина, я должен быть отрицательным целым числом.

person MikeKusold    schedule 17.06.2011
comment
Вставьте фактический сегмент кода. Без дополнительной информации большинство людей просто примут PEBCAK. - person MikeKusold; 17.06.2011

Если i равно 0, то оно ложно, так как не меньше 0.

То, о чем вы думаете, это if(i == 0) или if (i <= 0) (или, если уж на то пошло, if(i >= 0)). Каждое из них истинно, если i равно 0.

person kemiller2002    schedule 17.06.2011

0 < 0 всегда будет false. При каком условии вы ожидаете, что он будет оцениваться как true?

person this. __curious_geek    schedule 17.06.2011

0 < 0 неверно. используйте <=, если вы хотите, чтобы оно оценивалось как true, если i равно 0

person Kyle Trauberman    schedule 17.06.2011

Возможно, ваша простая логика должна быть:

int i = 0;
if(i <= 0) {Whatever } 
person Gregory A Beamer    schedule 17.06.2011