Stuart Hemming
Stuart Hemming

Reputation: 1663

Chaining methods with &&

I have a bunch of methods that all return a bool.

If one method returns false then there is no value in calling the following methods, especially as some of them are 'expensive' operations.

Which is the more efficient?

bool result = method1();
if (result) result = method2();
if (result) result = method3();
return result;

or

return method1() && method2() && method3();

As I understand it, the 2nd form should stop evaluating as soon as one of the methods returns false, right?

Upvotes: 4

Views: 1699

Answers (3)

Maheep
Maheep

Reputation: 5605

Yes you are right. Both && and || boolean operators in c# work as short-circuit operator. It stops evaluating expression once its value is determined. It stops unnecessary execution.

Hence return method1() && method2() && method3(); is better option in your case. If you have something in non-evaluated statement, say method3 in your case, it may lead to some side effects.

There is this very good language independent article about short-circuit operators on Wikipedia.

UPDATE: In C# if you want to use logical operator without short-circuit, use & and | operator instead.

Upvotes: 10

Dennis
Dennis

Reputation: 2142

The second will stop the expression evaluation after the first expression is evaluated to false.

although both examples are semantically equivalent the second one is more readable in my opionion.

Upvotes: 0

Strillo
Strillo

Reputation: 2972

Yes, the two methods are equivalent. Using && is a shortcut to achieve the same result as using a backing variable.

Upvotes: 1

Related Questions