一部の開発者が catch ブロックで return ステートメントを使用しているのを見てきました。なぜ/いつこれを採用するのに役立つテクニックですか?
編集:実際に return キーワードが使用されているのを見ました。
ありがとう
一部の開発者が catch ブロックで return ステートメントを使用しているのを見てきました。なぜ/いつこれを採用するのに役立つテクニックですか?
編集:実際に return キーワードが使用されているのを見ました。
ありがとう
Try 操作が失敗しただけで、スローされた例外を気にしない場合があります。例は、疑似コードで次のように見える TryParse 関数です。
try
{
//attempt conversion
return true;
}
catch
{
return false;
}
public void Function() {
try
{
//some code here
}
catch
{
return;
}
}
戻るとき; ヒットすると、実行フローが関数の外に飛び出します。これは、void メソッドでのみ実行できます。
編集: 関数の残りの部分を実行したくない場合は、これを行います。たとえば、ファイル IO を行っているときに読み取りエラーが発生した場合、そのファイル内のデータを処理するコードを実行したくありません。そのファイルを持っていないからです。
これは、関数の戻り値が catch ブロックでどうあるべきかを知っている場合に役立ちます。
例:
public bool IsDatabaseAvailable() {
try {
// connect
return true;
}
catch (Exception) {
return false;
}
finally {
// clean up
}
}
エラーをキャッチしてログに記録し、関数が成功したかどうかを示す false の値を返すと言うことができます。他の状況では、try ブロックで計算されたデータを返したい場合があります。
.Net Framework 内の一部のメソッドは、適切な形式でない場合に例外をスローします。
良い例は、int.TryParse(object value)
値が「10s」の場合、例外が発生します。この場合、無効な変換が原因であることがわかっています。
そう
try
{
int.TryParse(value);
return true;
}
catch { return false; }
文字列が有効な整数であるかどうかを示す関数である可能性があります。
この問題でそのフォームを使用する場合は、catch (Exception ex) を行わないでください。そうすると、.Net がオブジェクト内のエラーをシリアル化するため、少し遅くなります。
また、try catch ブロック内で return を使用しても、finally ブロックが実行されることを覚えておくことが重要です。
したがって、cleaup コードが finally 内にある場合でも、フレームワークが確実に呼び出すことを心配する必要はありません。
私の2セント。N.
試行が失敗した場合に代替手段がある状況。例として、file
が利用可能かどうかを確認することができます。operation
bool IsComplete = false;
try
{
// FileStream currentWriteableFile =
File.OpenWrite(sFileLocation);
}
catch(Exception)
{
return false;
}