首先是条件
if(Txt1.Text != "" && Txt2.Text != "")
第二条件
if((Txt1.Text && Txt2.Text) != "")
这两个条件语句之间是否存在差异?
答案 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) != ""
时,它首先评估括号内的内容,然后进行相等性检查。