2011-12-21 10 views
4

私はすべてがboolを返すメソッドがたくさんあります。&&を使用した連鎖方法

1つのメソッドがfalseを返す場合、特に高価な操作の一部として、次のメソッドを呼び出す際に値がありません。

どちらが効率的ですか?

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

または

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

私の理解では、第二の形式は右、できるだけ早く方法の一つがfalseを返すと評価停止する必要がありますか?

答えて

9

はい、あなたは正しいです。両方とも& &と|| C#のブール演算子は、短絡として動作します演算子。値が決まると式の評価を停止します。不要な実行を停止します。

したがって、return method1() && method2() && method3();はあなたの場合にはより良いオプションです。あなたが評価されていない声明の中に何かを持っているなら、あなたのケースではmethod3と言って、それはいくつかの副作用につながるかもしれません。

Wikipediaにショート回路演算子に関するこの非常に良い言語独立記事があります。

UPDATE:C#ので あなたが短絡することなく、論理演算子を使用したい場合は、&を使用して|代わりに演算子。

+0

ありがとう、esp。 Wikipediaの記事へのポインタ。 –

1

はい、2つの方法は同等です。 & &を使用すると、バッキング変数を使用するのと同じ結果が得られます。

+0

ありがとう。 –

+0

これは間違っていますが、&&は呼び出し、保管、テストと同じではありません。 &演算子は同じです。 – RSinohara

0

最初の式がfalseに評価された後、2番目の式の評価が停止します。

両方の例は意味的に同等ですが、2番目の例は私のオピオオンでより読みやすくなります。

関連する問題