すでに質問が投稿されています ここ これは非常によく似ています。私はその質問をもう少し拡張しています。複数の種類の例外をキャッチしたいが、同じ方法で処理したい場合、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
}
現在、あなたが望むことを達成するための言語構造はありません。例外がすべて基本例外から派生している場合を除き、共通ロジックをメソッドにリファクタリングし、さまざまな例外ハンドラーから呼び出すことを検討する必要があります。
または、この質問で説明されているように行うこともできます。
個人的には、メソッドベースのアプローチを好む傾向があります。
本当にBaseCustomExceptionがあり、それをキャッチする必要があります。
これは 別の投稿からコピー ですが、私はこのスレッドにコードをプルしています:
キャッチSystem.Exception
そしてタイプをオンにします
catch (Exception ex)
{
if (ex is FormatException || ex is OverflowException)
{
WebId = Guid.Empty;
return;
}
throw;
}
私はこれをいくつかのcatchブロックでメソッド呼び出しを繰り返すよりも好みます。
Vb.netでは、例外フィルターを使用して次のように言うことができます。
TypeOf ExがThisExceptionであるか、TypeOfExがThatExceptionである場合にExを例外としてキャッチ
残念ながら、何らかの理由で、C#の実装者は、例外フィルタリングコードをC#内に記述できるようにすることをまだ拒否しています。
これほど多くのカスタム例外をキャッチするべきではありませんが、必要に応じて、共通のBaseException
を作成してキャッチすることができます。