ホームページ >バックエンド開発 >C++ >単一のコード ブロックで複数の例外を効率的にキャッチするにはどうすればよいですか?

単一のコード ブロックで複数の例外を効率的にキャッチするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-20 23:17:12785ブラウズ

How Can I Efficiently Catch Multiple Exceptions in a Single Code Block?

単一のコード ブロックで複数の例外をキャッチします

プログラミング言語では、例外のキャッチはエラー処理の重要な部分です。ただし、複数の特定の例外をキャッチする必要がある場合、特にオブジェクトに対して複数の操作を実行する場合、処理が冗長で反復的になる可能性があります。

質問:

クエリ文字列から GUID を解析してフィールドに設定しようとする次のコードを考えてみましょう。

<code>try
{
    WebId = new Guid(queryString["web"]);
}
catch (FormatException)
{
    WebId = Guid.Empty;
}
catch (OverflowException)
{
    WebId = Guid.Empty;
}</code>

この例では、GUID 解析中に FormatException または OverflowException が発生した場合、WebId は Guid.Empty に設定されます。ただし、その他の予期しない例外が発生した場合、その例外は処理されずに伝播します。ボイラープレート コードを回避し、複数の例外を効率的に処理するには、より優れたソリューションが必要です。

解決策: System.Exception をキャッチし、型に基づいて切り替えます

単一のコード ブロックで複数の例外をキャッチするには、catch (Exception ex) 構文を使用できます。これにより、FormatException や OverflowException などの特定の例外を含む、基本 Exception クラスから継承されたすべての例外がキャッチされます。

例外をキャッチした後、例外のタイプに基づいて switch ステートメントを使用して、例外の処理方法を決定できます。例外が既知の例外 (FormatException や OverflowException など) である場合は、特定のアクション (WebId を Guid.Empty に設定するなど) を実行できます。それ以外の場合は、例外を再スローして、上位レベルのコードで処理できるようにすることができます。

<code>catch (Exception ex)            
{                
    if (ex is FormatException || ex is OverflowException)
    {
        WebId = Guid.Empty;
    }
    else
        throw;
}</code>

このアプローチにより、予期しない例外の伝播を許可しながら、コード ブロック内の複数の特定の例外をキャッチして必要に応じて処理できます。

以上が単一のコード ブロックで複数の例外を効率的にキャッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。