Will an IF statement stop evaluating if it fails the first condition?

老子叫甜甜 提交于 2019-11-28 19:05:55
Paul Spangle

It will stop evaluating because you're using the double ampersand && operator. This is called short-circuiting.

If you changed it to a single ampersand:

if(myList.Count > 0 & myString.Equals("value"))

it would evaluate both.

MBen

No, it will not be considered. (This is known as short circuiting.)

The compiler is clever enough (and required by language specification) to know that if the first condition is false, there is no way to expression will evaluate to true.

And as Jacob pointed for ||, when the first condition is true, the second condition will not be evaluated.

If the logical operator is AND (&&) then IF statement would evaluate first expression - if the first one is false, it would not evaluate second one. This is useful to check if variable is null before calling method on the reference - to avoid null pointer exception

If the logical operator is OR (||) then IF statement would evaluate first expression - if the first one is true, it would not evaluate second one.

Compilers and runtimes are optimized for this behavior

No, second condition will be skipped if you use &&,

If you use & it will be considered

Consider the folowing:

static int? x;
static int? y;

static void Main(string[] args)
{
    x = 5;
    if (testx() & testy())
    {
        Console.WriteLine("test");
    }
}

static Boolean testx()
{
    return x == 3;
}

static Boolean testy()
{
    return y == 10;
}

If you trace through both the testx and testy functions are evaulated even though testx was false.

If you change the test to && only the first was checked.

In your example, the second statement will only be evaluated if the first fails. The logical AND && will only return true when both operands are true, aka short circuit evaluation.

.NET supports short circuiting so when first condition goes fail, it will not check the second condtion....In C# || and && are the short-circuited versions of the logical operators | and & respectively....It is often faster too...

The expression will be evaluated from left to right because it is a logical AND operation. If false, it will stop evaluation. It also has the greatest precedence of the operations in your expression.

The conditional-AND operator (&&) performs a logical-AND of its bool operands, but only evaluates its second operand if necessary. Conditional And Operator (&&) MSDN

Here is a set of sections listing the C# operators starting with the highest precedence to the lowest.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!