2011-01-06 2 views
2

У меня есть очень глупый IssueГлупый вопрос, если блок

if (updateYN.ToUpper() != Constants.NO 
         || updateYN.ToUpper() != Constants.N) 
{ 
    // execute code for any other updateYN 
} 

Я пытаюсь выполнить Filteration, что если значение updateYN не NO (Constants.NO) или N (Constants.N) , затем выполните инструкцию.

Но проблема в том, что, невосприимчив к значениям, выполняется блок if.

Что плохого там

ответ

3

Похоже, вы хотите и о ... нет? (НЕ НЕТ И НЕ)

1

ОК, ваша проблема в том, что вы переводите язык на код. Ваше заявление должно быть:

if (updateYN.ToUpper() != Constants.NO 
         && updateYN.ToUpper() != Constants.N) 
{ 
    // execute code for any other updateYN 
} 

Это говорит компилятору, что updateYN.ToUpper() не должно быть и не должно быть Н.

EDIT: Для того, чтобы сделать его более понятным, почему ваш, если условие всегда заканчивая, вот несколько объяснений. Представьте себе это утверждение:

если (! Х = 1 || х = 2) { ... }

Вы бы себе представить, что если х 1 или 2, блок не должен быть выполнено, но это будет, потому что это утверждение состоит из двух частей фактически:!

х = 1 х = 2

или часть сообщает компилятор, что если какое-либо из этих условий истинно, то все условие истинно. Очевидно, если x равно 1, то это не 2, поэтому условие выполняется, и то же самое, если оно равно 2. Подумайте обо всех значениях в мире, они не могут быть равны 1 и 2, поэтому этот блок всегда будет выполняться. То же самое с вашим случаем здесь. Надеюсь, что это хорошо объясняет вашу проблему.

0

Если Constants.NO и Constants.N не равные, это всегда true. Вероятно, он всегда отличается от NO или N.

1

Логически думать об этом так: ваше утверждение распадается на три составляющие

a = updateYN.ToUpper() != Constants.NO 
b = updateYN.ToUpper() != Constants.N 

c = a or b 

Но если вы думаете об этом, если updateYN.ToUpper() является Constants.NO то ложно, но б верно, и, таким образом, с правда. И если updateYN.ToUpper() - Constants.N, тогда b является ложным, но a истинно, и, следовательно, c истинно. То, что вы, кажется, хотите,

if(updateYN.ToUpper() != Constants.NO && updateYN.ToUpper() != Constants.N) 

Это означает, что updateYN.ToUpper() должно быть равно что-то другое, чем Constants.NO и Constants.N для того, чтобы в целом заявление, чтобы быть правдой.

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