web-dev-qa-db-ja.com

トライキャッチ。複数の例外を同じ方法で(またはフォールスルーで)処理する

すでに質問が投稿されています ここ これは非常によく似ています。私はその質問をもう少し拡張しています。複数の種類の例外をキャッチしたいが、同じ方法で処理したい場合、switch caseのようなことを行う方法はありますか?

switch (case)
{
  case 1:
  case 2:

  DoSomething();
  break;
  case 3:
  DoSomethingElse()
  break;

}

いくつかの例外を同じ方法で処理することは可能ですか。何かのようなもの

try
{
}
catch (CustomException ce)
catch (AnotherCustomException ce)
{
  //basically do the same thing for these 2 kinds of exception
  LogException();
}
catch (SomeOtherException ex)
{
 //Do Something else
}
23
ram

現在、あなたが望むことを達成するための言語構造はありません。例外がすべて基本例外から派生している場合を除き、共通ロジックをメソッドにリファクタリングし、さまざまな例外ハンドラーから呼び出すことを検討する必要があります。

または、この質問で説明されているように行うこともできます。

一度に複数の例外をキャッチしますか?

個人的には、メソッドベースのアプローチを好む傾向があります。

15
João Angelo

本当にBaseCustomExceptionがあり、それをキャッチする必要があります。

8
pdr

これは 別の投稿からコピー ですが、私はこのスレッドにコードをプルしています:

キャッチSystem.Exceptionそしてタイプをオンにします

catch (Exception ex)            
{                
    if (ex is FormatException || ex is OverflowException)
    {
        WebId = Guid.Empty;
        return;
    }

    throw;
}

私はこれをいくつかのcatchブロックでメソッド呼び出しを繰り返すよりも好みます。

4
Jacob Brewer

Vb.netでは、例外フィルターを使用して次のように言うことができます。

 TypeOf ExがThisExceptionであるか、TypeOfExがThatExceptionである場合にExを例外としてキャッチ

残念ながら、何らかの理由で、C#の実装者は、例外フィルタリングコードをC#内に記述できるようにすることをまだ拒否しています。

1
supercat

これほど多くのカスタム例外をキャッチするべきではありませんが、必要に応じて、共通のBaseExceptionを作成してキャッチすることができます。

0
Stan R.