首页 > 解决方案 > 具有多个条件的 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;
}

如果myStrEmpty

我的想法是,第一种方法在达到(或达到)之前检查所有 3 个条件return

而第二种方法只需要检查第一个条件string.IsNullOrEmpty,达到return,并且不必处理它下面的其他两个条件检查。


或者编译器是否优化代码以最有效地工作,无论源代码是如何编写的?

标签: c#

解决方案


它们是等价的。运算符短路,因此||一旦达到条件即true停止检查其他条件并返回true

|运算符不会短路,因此它会返回值之前评估每个操作数。

同样适用于&&and&但有false. 一旦达到假条件,&&操作员就会返回假。

所以你的两种方法在功能上是相同的。使用您认为最清晰、最容易推断意图等的任何一个。

或者编译器是否优化代码以最有效地工作,无论源代码是如何编写的?

好吧,优化器可以更改代码以提高效率,但它不能更改功能行为,这意味着它不会更改操作的顺序。想象一下你有类似的东西:

if ((x == 0) || (y/x > 1))

这是防止被零除错误的常用方法。如果编译器可以重新排列操作数,那么它可能会引入被零除的错误。


推荐阅读