我对条件与逻辑||有点不清楚oprators。好吧,看看我刚写的内容,让我重申一下:我的代码根据条件和逻辑OR之间的差异没有做它应该做的事情。
我将文本框作为日期字段,默认情况下其text属性设置为“mm / yyyy”。我的验证器评估此条件的真值和空值(如同两个引号/“”/标记)。所以在这之后我用这个检查价值:
if (tbEndDateMo.Text != "mm/yyyy" | tbEndDateMo.Text != "" | tbEndDateMo.Text != string.Empty)
当值为“mm / yyyy”时,它在IF内部传递,当值为空时传递相同。看看这个Microsoft reference,我理解差异,我认为我是基于此编写代码的 - 但它并不像我想要的那样工作。如果文本框的计算结果为“mm / yyyy”或空白(或为空),则跳过IF。我做错了什么?
谢谢,
Risho
答案 0 :(得分: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")
答案 1 :(得分:1)
指出了程序流程的问题。我注意到你声称逻辑OR看起来像条件或。如果您阅读文档here,您将看到它只执行逻辑或类型是不可变的。你可以看到,它们是布尔值,因此它计算条件OR:)
答案 2 :(得分: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
...
*)好吧,也许我已经习惯了旧的命名法,不管怎么说,其余的我写的都是有效的。