0

我有点不清楚条件与逻辑 || 运营商。好吧,看看我刚刚写的内容,让我重申一下:我的代码没有按照条件 OR 和逻辑 OR 之间的差异做它应该做的事情。

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

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

当值为“mm/yyyy”时,它在 IF 内部传递,当值为空时相同。查看此Microsoft 参考资料,我了解其中的区别,并且我认为我基于此编写了代码 - 但它并没有按照我想要的方式工作。如果文本框计算结果为“mm/yyyy”或空白(或空)跳过 IF。我究竟做错了什么?

谢谢,

理庄

4

3 回答 3

2

您的条件不正确-有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")
于 2013-02-25T17:59:08.507 回答
1

已经指出了您的程序流程的问题。我注意到您声称逻辑 OR 的行为类似于条件或。如果您阅读此处的文档,您会发现它只执行逻辑或类型是整数。你能看到吗,它们是布尔值,因此它计算条件 OR :)

于 2013-02-25T18:03:26.607 回答
0

你的感知逻辑有问题。检查这个:

让 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

另外,请记住,没有“逻辑”和“条件”OR/AND。这些被称为“按位”和“逻辑” *)。它们之间的唯一区别是非常微妙的。就是|| 并且 && 在不需要时不会计算子表达式,而 | 并且 & 总是评估。所以:

MyClass x = null; // intentional

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

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

*) 好吧,也许我已经习惯了旧的命名法,无论如何,我写的其余内容都是有效的。

于 2013-02-25T17:59:48.910 回答