逻辑OR的作用似乎类似于条件OR



我对条件运算符与逻辑运算符有点不清楚。好吧,看看我刚刚写的内容,让我重申一下:基于条件OR和逻辑OR之间的差异,我的代码并没有做它应该做的事情。

我有一个文本框作为日期字段,默认情况下其文本属性设置为"mm/yyyy"。我的验证器针对这个条件和空值(如两个引号/"/标记(计算为true。所以在所有这些之后,我用这个来检查值:

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

当值为"mm/yyyy"时,它在IF内部传递,当值为空时也是如此。看看这篇微软参考资料,我理解其中的区别,我认为我是基于这一点编写代码的,但它并没有按照我希望的方式工作。如果文本框的值为"mm/yyyy"或空白(或空(,请跳过If。我做错了什么?

谢谢,

Risho

您的条件不正确-有100%的机会tbEndDateMo.Text不等于"mm/yyy"同时清空字符串!

你应该检查一下:

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

但是,您应该考虑使用string.IsNullOrEmpty方法而不是== string.Empty

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

已经指出了程序流的问题。我注意到你声称逻辑"或"的作用似乎与条件"或"类似。如果你阅读这里的文档,你会发现它只执行逻辑或如果类型是积分的。您可以看到,它们是布尔值,因此它计算条件OR:(

您感知到的逻辑存在错误。检查:

让tbEndDateMo.Text等于",让我们减少表达式

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

此外,请记住,没有"逻辑"one_answers"条件"OR/and。这些被称为"位"one_answers"逻辑">*(。它们之间仅有的区别非常微妙。它是||和&在不需要时不计算子表达式,而|和&始终进行评估。因此:

MyClass x = null; // intentional
if( x != null && x.Field > 8)  // will NOT throw
        ...
if( x != null & x.Field > 8)  // WILL throw NullReferenceException
        ...

*)好吧,也许我已经习惯了旧的命名法,不管怎样,我写的其余内容都是有效的。

最新更新