这两个“如果”条件陈述之间有什么区别吗?

时间:2010-05-22 03:56:41

标签: c# if-statement

首先是条件

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

第二条件

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

这两个条件语句之间是否存在差异?

6 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

嗯,第二个是mal-typed并被编译器拒绝了?

答案 2 :(得分:3)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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