Логичный ИЛИ, кажется, действует как условное предложение ИЛИ

Я несколько неясен об условном предложении против логического || oprators. Ну, смотря на то, что я просто написал, позвольте мне вновь заявить что: Мой код не делает то, что он предположил, чтобы сделать на основе различий между условным и логическим ИЛИ.

У меня есть текстовое окно как поле даты, у которого есть его текстовый набор свойств к "mm/yyyy" по умолчанию. Мое контрольное устройство оценивает верный для этого условия и для пустой стоимости (как с двумя цитатами/""/отметки) также. Так, в конце концов, это я согласовываю стоимость с этим:

if (tbEndDateMo.Text != "mm/yyyy" | tbEndDateMo.Text != "" | tbEndDateMo.Text != string.Empty)

Когда стоимость - "mm/yyyy", она проходит в, ЕСЛИ и то же самое, когда стоимость чиста. Рассмотрение этого Ссылка Microsoft, Я понимаю различие, и я думал, что написал код на основе этого - но это не прокладывает себе путь, я хочу его к. Если текстовое окно оценивает к "mm/yyyy" или бланку (или пустой) пропускают ЕСЛИ. Что я делаю неправильно?

Спасибо,

Risho

0
nl ja de
@AnthonyPegram: Таким образом, что, если кто-то поражает клавишу "пробел" (случайно) и отправляет страницу? (Я должен использовать Трима() - но that' s другая тема)
добавлено автор Risho, источник
| , в этом контексте, не является битовым "ИЛИ", it' s просто несрывание ИЛИ. Нет никакой причины, учитывая ваш код, постараться не срывать.
добавлено автор Servy, источник
@AnthonyPegram ну, вероятно && , не & .
добавлено автор Servy, источник
Вы кажетесь, что хотите &, не |
добавлено автор Anthony Pegram, источник
Также отметьте то сравнение, чтобы натянуть. Пустой и "" повторяющееся, избыточный, и повторяющийся.
добавлено автор Anthony Pegram, источник
Вы ответили на свой собственный вопрос. Если пространство также недействительно, сделайте его так, чтобы программа обнаружила его. Можно урезать его, как вы предположили, который сделает сравнение с последовательностью. Пустой удар в, или можно обновить, чтобы использовать ! последовательность. IsNullOrWhitespace (вводят) , который обращался бы, аннулирует, порожняя тара и последовательности пробела.
добавлено автор Anthony Pegram, источник

3 ответы

Вы обусловливаете, неправильное - есть 100%-й шанс </силен>, тот tbEndDateMo. Текст не равен, чтобы "mm/yyy" или к пустой строке в то же время!

Необходимо проверить что:

if (tbEndDateMo.Text != "mm/yyyy" && tbEndDateMo.Text != "" && tbEndDateMo.Text != string.Empty)

However, you should consider using string.IsNullOrEmpty method instead of == string.Empty

if (!string.IsNullOrEmpty(tbEndDateMo.Text) && tbEndDateMo.Text != "mm/yyyy")
2
добавлено
IIRC, TextBox никогда не возвращается пустой указатель от:: текстовая собственность, но действительно there' s большой шанс автор doesn' t знают тот метод:)
добавлено автор quetzalcoatl, источник

На проблему с потоком вашей программы указали. Я заметил, что вы утверждаете, что Логическое ИЛИ, кажется, действует как условное предложение или. Если вы читаете документацию здесь, вы будете видеть, что это только выполняет логическое или если типы являются неотъемлемой частью. Вы, видят, они булевы, и таким образом это вычисляет условное предложение ИЛИ:)

1
добавлено
Так, what' s надлежащее или обычно используемый метод к этому? Это было преследующим некоторое время. Мне нравится @MarcinJuraszek решение, но я can' t полагают, что это не было бы общей ситуацией.
добавлено автор Risho, источник
Я не имел в виду литературную работу, но являюсь этим, как вы сделали бы это?
добавлено автор Risho, источник
Хорошо.. вы использовали неправильных операторов, таким образом, @MarginJuraszek был правилен в том, что он написал. Вы просто написали неправильный код. Вокруг нет никакой общей работы.. просто исправьте код:)
добавлено автор christopher, источник
Да. Необходимо структурировать условия, таким образом, они логически правильны. С этой целью. @MarcinJuraszek был правилен:)
добавлено автор christopher, источник

В вашей воспринятой логике есть ошибка. Исследуйте это:

позвольте tbEndDateMo. Текст быть равным "" и позволяет нам уменьшить выражение

tbEndDateMo.Text != "mm/yyyy" | tbEndDateMo.Text != "" | tbEndDateMo.Text != string.Empty
"" != "mm/yyyy" | "" != "" | "" != string.Empty
true | false | false
true

По всей вероятности, вы хотели:

tbEndDateMo.Text != "mm/yyyy" && tbEndDateMo.Text != "" && tbEndDateMo.Text != string.Empty

Also, remember that there's no "logic" and "conditional" OR/ANDs. Those are called "bitwise" and "logic"*). The only difference between them is very subtle. It is that the || and && does not evaluate subexpressions when not needed, whereas the | and & always evaluate. Therefore:

MyClass x = null;//intentional

if( x != null && x.Field > 8) //will NOT throw
        ...

if( x != null & x.Field > 8) //WILL throw NullReferenceException
        ...

*) хорошо, возможно я привык к старой номенклатуре, так или иначе, остальные, что я написал, действительно.

0
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot