c# - 具有多个条件的 If 语句与单个 If 语句
问题描述
我想检查每个条件以及return
是否为真。
是否更好:
1.一条if
语句中有多个条件?
if (string.IsNullOrEmpty(myStr) ||
myBool == true ||
myList.Count == 0)
{
return;
}
2.或多个if
语句,每个语句检查不同的条件。
if (string.IsNullOrEmpty(myStr))
{
return;
}
if (myBool == true)
{
return;
}
if (myList.Count == 0)
{
return;
}
如果myStr
是Empty
。
我的想法是,第一种方法在达到(或达到)之前检查所有 3 个条件return
?
而第二种方法只需要检查第一个条件string.IsNullOrEmpty
,达到return
,并且不必处理它下面的其他两个条件检查。
或者编译器是否优化代码以最有效地工作,无论源代码是如何编写的?
解决方案
它们是等价的。运算符短路,因此||
一旦达到条件即true
停止检查其他条件并返回true
。
|
运算符不会短路,因此它会在返回值之前评估每个操作数。
同样适用于&&
and&
但有false
. 一旦达到假条件,&&
操作员就会返回假。
所以你的两种方法在功能上是相同的。使用您认为最清晰、最容易推断意图等的任何一个。
或者编译器是否优化代码以最有效地工作,无论源代码是如何编写的?
好吧,优化器可以更改代码以提高效率,但它不能更改功能行为,这意味着它不会更改操作的顺序。想象一下你有类似的东西:
if ((x == 0) || (y/x > 1))
这是防止被零除错误的常用方法。如果编译器可以重新排列操作数,那么它可能会引入被零除的错误。
推荐阅读
- javascript - Jquery 在提交表单之前检查单选按钮
- android - 缓慢的 signInAnonymously() 和 auth().currentUser.getIdToken()
- ios - 为用户位置显示闪烁的蓝点和 AnnotatationView
- java - 需要有关保存数组列表的更多详细信息
- ios - AudioKit:AKNodeOutputPlot 和 AKMicrophone 不工作,可能是由于生命周期或 MVVM 架构决定
- c - 当我的 fgets 输入超过指定的缓冲区大小时,我的(非常简单的)程序似乎表现出奇怪的行为
- c# - 如何强制 throw 成为语句而不是表达式(在 lambda 表达式中)?
- javascript - 使用非 ISO 标准日期格式的 MomentJs
- r - r中按商店级别的叉积计算
- apache - kill -28 和 apache 优雅停止的区别