Reputation:
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
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
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
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
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
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
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
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
Reputation: 240948
No, second condition will be skipped if you use &&
,
If you use &
it will be considered
Upvotes: 4