user1017882
user1017882

Reputation:

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

If I have an If statement with 2 conditions - and the first fails, will the 2nd condition even be considered or will it go straight to the else? So, in the following example, if myList.Count == 0, will myString be compared against "value" or will it just straight to else?

if(myList.Count > 0 && myString.Equals("value"))
{
//Do something
}
else
{
//Do something else
}

Upvotes: 63

Views: 65515

Answers (8)

Andrew Carmichael
Andrew Carmichael

Reputation: 3113

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.

Upvotes: 105

Travis J
Travis J

Reputation: 82297

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.

Upvotes: 0

MBen
MBen

Reputation: 3996

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.

Upvotes: 24

Rutesh Makhijani
Rutesh Makhijani

Reputation: 17235

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

Upvotes: 7

BugFinder
BugFinder

Reputation: 17868

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.

Upvotes: 2

Akash KC
Akash KC

Reputation: 16310

.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...

Upvotes: 1

dtsg
dtsg

Reputation: 4459

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.

Upvotes: 1

Jigar Joshi
Jigar Joshi

Reputation: 240948

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

If you use & it will be considered

Upvotes: 4

Related Questions