首先,如果条件这两个“if”条件语句有没有区别?
if(Txt1.Text != "" && Txt2.Text != "")
其次,如果条件
if((Txt1.Text && Txt2.Text) != "")
是否有这两个条件语句之间的差异?
首先,如果条件这两个“if”条件语句有没有区别?
if(Txt1.Text != "" && Txt2.Text != "")
其次,如果条件
if((Txt1.Text && Txt2.Text) != "")
是否有这两个条件语句之间的差异?
是的。第二个是尝试&&
两个字符串,并将结果与空字符串进行比较。我不相信这是有效的C#,因为没有&&
运算符超载存在两个字符串。
我欣赏你对简洁的渴望,但第一个真的是你想要的。
嗯,第二个是错误类型,并被编译器拒绝?
你不能做第二个。第一个是正确的。
第二个不被编译器接受。因为字符串类型不能与布尔类型进行比较。
'&&'不需要限制为布尔参数;就像'+'不限于算术类型一样。 – 2016-01-14 15:30:23
首先,如Blair Conrad所述,if((Txt1.Text && Txt2.Text) != "")
将不会编译,因为您无法对两个字符串执行布尔操作and
。但是,如果您问if((Txt1.Text + Txt2.Text) != "")
是否比第一个操作更有效率,我会说这可能不是更高效,因为Txt1.Text + Txt2.Text
将首先创建一个新字符串,然后将其与空字符串进行比较。诚然,我们可能在谈论纳秒级的差异。
无论如何,你应该在每个字符串上使用string.IsNullOrEmpty
,因为它使你的意图更清晰。
关于Txt1.Text + Txt2.Text的好处。另一方面,'string.IsNullOrEmpty'不一定是替代品 - 有时我们确实在寻找空字符串。也许'null'代表未初始化的,并且任何非空值都是有效的。尽管我赞同@Thomas,只要有意义,值得使用。 – 2010-05-22 10:53:03
if((Txt1.Text && Txt2.Text) != "")
虽然布尔逻辑确实有associative properties为&&
和||
运营商,它并不适用于运营商的平等,这是它看起来像你想在这里做的:
(a && b) != "" -- doesn't translate to --> a != "" && b != ""
平等,在first-order logic中定义为reflexive (a=a), symmetric (a=b, b=a) and transitive (a=b, b=c, a=c),但不是关联。
或者,如果您从编译器的角度考虑它,圆括号有higher precedence比相等运算符。因此,当编译器评估表达式(Txt1.Text && Txt2.Text) != ""
时,它首先评估括号内的内容,然后进行相等性检查。
我觉得你困惑传递和对称。 – 2016-01-14 15:25:54
固定。感谢您指出了这一点。 – 2016-01-14 19:20:34
请问C#会编译第二个?我不会这么想,因为你正试图对两个字符串值进行布尔运算和运算。 – Thomas 2010-05-22 03:59:06
你的意思是在第二个字符串连接? if((Txt1.Text + Txt2.Text)!=“”) – Elisha 2010-05-22 04:02:00
@Elisha不是字符串连接! – 2010-05-22 04:09:13