【发布时间】:2014-05-18 12:06:11
【问题描述】:
我正在做一个频率分析,我希望它能够自动切换字母。我知道要切换到什么,但你能有你的代码吗:
if(a > b && a > c && a > c) { //code }
有人告诉我,如果 a > b,它不会评估其余代码。这是真的吗?
【问题讨论】:
-
它不会评估
a < b,而不是其他人想要的。这叫做短路。
我正在做一个频率分析,我希望它能够自动切换字母。我知道要切换到什么,但你能有你的代码吗:
if(a > b && a > c && a > c) { //code }
有人告诉我,如果 a > b,它不会评估其余代码。这是真的吗?
【问题讨论】:
a < b,而不是其他人想要的。这叫做短路。
当 .Net 计算 && 时,它使用 short-circuiting:它检查第一个表达式 (a > b) 和
如果它 false 什么都不做,如果 true 检查第二个 (a > c) 等,那么你的情况
if(a > b && a > c && a > d) { //code }
等于
if (a > b)
if (a > c)
if (a > d) { //code }
【讨论】:
if(a > b && a > c && a > c)
如果a > b 为假,则不会验证a > c。因为两者都必须为真才能执行代码。但是如果a > b 为真,那么它也会检查a > c。
另外,a > c 两次是没有意义的。
如果只有一个比较必须为真,您可以使用|| 运算符。
【讨论】:
实际上这被称为短路评估,其中不同的语句之间有 AND 运算符,如果一个语句为假,C# 运行时会将整个表达式评估为假,然后忽略其余的语句评估。
如果您想要计算所有表达式而不管每个表达式的结果如何,请使用单个 & 而不是两个 &&。它将逐位比较它们,并强制评估所有语句以确定最终结果。
if(a > b && a > c && a > c)
改为
if(a > b & a > c & a > c)//it will evaluate all the conditions before the final result
更多信息请查看: LINK
【讨论】: