パフォーマンスは、ここで最も関連性の高い問題ではありません。問題は、どちらが読みやすい/保守可能な/テスト可能なプログラムにつながるかです。後でパフォーマンスについて心配することはできます。
一般に、フロー制御の例外は使用しないでください。彼らは事実上非ローカルのgoto
であり、プログラムを読みやすく、フォローするのが難しくなります。したがって、例外的な状況のために予約する必要があります。フロー制御のためにブロックtry-catch
を使用しないで逃げることができたら、しないでください。あなたのプログラムはより読みやすく保守的です。
この状況に対処するための「正しい」方法はsomeMethod
からの戻り値がある保証契約(Contract.Ensures
)がある場合
var list = someMethod();
if(list == null || list.Length == 0) {
// handle something bad
}
string a = list[0];
if(a != null) {
// go
}
あなたはlist
がnullや空ではないではないことをチェックを回避することができていますnullでなく、空でもありません。
ただし、例外はローカルに高価です。それらがプログラムのパフォーマンスに影響を与えるかどうか(つまりボトルネック)は別の質問です。しかし、例外は一般的にボトルネックではありません(アプリケーションがクラッシュするとパフォーマンスが気になる人はいませんか?)
単語「速く」をキャンセルします。無関係です。そして、あなたがCLRを動かすようなものなので、try-catchを使うのは正しい方法でもありません。 – BoltClock
ほんの一例の男... – carlosdubusm
@BoltClock、そうではありません。例外が発生した場合。遅いです。 – CaffGeek