2010-05-22 76 views
1

首先,如果条件这两个“if”条件语句有没有区别?

if(Txt1.Text != "" && Txt2.Text != "") 

其次,如果条件

if((Txt1.Text && Txt2.Text) != "") 

是否有这两个条件语句之间的差异?

+0

请问C#会编译第二个?我不会这么想,因为你正试图对两个字符串值进行布尔运算和运算。 – Thomas 2010-05-22 03:59:06

+1

你的意思是在第二个字符串连接? if((Txt1.Text + Txt2.Text)!=“”) – Elisha 2010-05-22 04:02:00

+0

@Elisha不是字符串连接! – 2010-05-22 04:09:13

回答

7

是的。第二个是尝试&&两个字符串,并将结果与​​空字符串进行比较。我不相信这是有效的C#,因为没有&&运算符超载存在两个字符串。

我欣赏你对简洁的渴望,但第一个真的是你想要的。

3

嗯,第二个是错误类型,并被编译器拒绝?

1

你不能做第二个。第一个是正确的。

1

第二个不被编译器接受。因为字符串类型不能与布尔类型进行比较。

+0

'&&'不需要限制为布尔参数;就像'+'不限于算术类型一样。 – 2016-01-14 15:30:23

3

首先,如Blair Conrad所述,if((Txt1.Text && Txt2.Text) != "")将不会编译,因为您无法对两个字符串执行布尔操作and。但是,如果您问if((Txt1.Text + Txt2.Text) != "")是否比第一个操作更有效率,我会说这可能不是更高效,因为Txt1.Text + Txt2.Text将首先创建一个新字符串,然后将其与空字符串进行比较。诚然,我们可能在谈论纳秒级的差异。

无论如何,你应该在每个字符串上使用string.IsNullOrEmpty,因为它使你的意图更清晰。

+0

关于Txt1.Text + Txt2.Text的好处。另一方面,'string.IsNullOrEmpty'不一定是替代品 - 有时我们确实在寻找空字符串。也许'null'代表未初始化的,并且任何非空值都是有效的。尽管我赞同@Thomas,只要有意义,值得使用。 – 2010-05-22 10:53:03

0
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) != ""时,它首先评估括号内的内容,然后进行相等性检查。

+0

我觉得你困惑传递和对称。 – 2016-01-14 15:25:54

+0

固定。感谢您指出了这一点。 – 2016-01-14 19:20:34