我遇到了这个:
bool Isvalid = isValid & CheckSomething()
bool Isvalid = isValid && CheckSomething()
Run Code Online (Sandbox Code Playgroud)
第二种情况可能是短路的情况.
所以我们不能总是只使用&而不是&&?
Tal*_*joe 65
&是一个有点"AND",意味着它在位级别上工作.&&是逻辑"AND",意味着它在布尔(true/false)级别工作.逻辑AND使用短路(如果第一部分是假的,没有用于检查第二部分)以防止运行多余的代码,而逐位AND需要和每一位,所以它将获得值.
你应该使用逻辑AND(&&),因为这就是你想要的东西(并且可能没有做正确的事情),但如果你想评估它的副作用,你可能需要单独运行该方法:
var check = CheckSomething();
bool IsValid = isValid && check;
Run Code Online (Sandbox Code Playgroud)
opi*_*ahn 13
在&&中,第二个表达式仅在第一个表达式为真时进行评估.
而&只是一种连接两个表达式的方法,如true&true = true,true&false = false等.
Adr*_*ian 11
C#有两种类型的布尔逻辑运算符:
x & y 逻辑和
true仅在结果x和y评估结果truex和y.x && y 条件逻辑AND
true仅在结果x和y评估结果truex首先x进行评估,如果评估为false,则false立即返回而不进行评估y(短路)因此,如果您依赖于两者x并y进行评估,您可以使用&运算符,尽管它很少使用且难以阅读,因为副作用对读者来说并不总是很清楚.
注意:二进制&运算符也存在于整数类型,它执行按位逻辑AND.
我相信你错过了什么.在第二个场景中,如果isValid为false,则不评估CheckSomething
条件AND运算符(&&)执行其bool操作数的逻辑AND,但仅在必要时才计算其第二个操作数.
http://msdn.microsoft.com/en-us/library/2a723cdk(v=vs.71).aspx
| 归档时间: |
|
| 查看次数: |
54111 次 |
| 最近记录: |