私はいくつかの例外をキャッチしたくありません。どういうわけかできますか?
私はこのようなことを言うことができます:
catch (Exception e BUT not CustomExceptionA)
{
}
?
私はいくつかの例外をキャッチしたくありません。どういうわけかできますか?
私はこのようなことを言うことができます:
catch (Exception e BUT not CustomExceptionA)
{
}
?
try
{
// Explosive code
}
catch (CustomExceptionA){ throw; }
catch (Exception ex)
{
//classic error handling
}
try
{
}
catch (Exception ex)
{
if (ex is CustomExceptionA)
{
throw;
}
else
{
// handle
}
}
C#6以降では、例外フィルターを使用できます。
try
{
// Do work
}
catch (Exception e) when (!(e is CustomExceptionA))
{
// Catch anything but CustomExceptionA
}
あなたはそれをフィルタリングすることができます:
if (e is CustomExceptionA) throw;
そしてもちろん、あなたはそれを捕まえてそれを投げ直すことができます:
try
{
}
catch (CustomExceptionA) { throw; }
catch (Exception ex) { ... }
まず、ログに記録して再スローしない限り、例外をキャッチすることはお勧めできません。ただし、必要な場合は、カスタム例外をキャッチして、次のように再スローする必要があります。
try
{
}
catch (CustomExceptionA custome)
{
throw custome;
}
catch (Exception e)
{
// Do something that hopefully re-throw's e
}
コメントで@Servyに教えられた後、私はあなたがやりたいことを[私が思う]できるようにする解決策を考えました。IgnoreExceptionsFor()
次のようなメソッドを作成しましょう。
public void PreventExceptionsFor(Action actionToRun())
{
try
{
actionToRun();
}
catch
{}
}
これは、次のように呼び出すことができます。
try
{
//lots of other stuff
PreventExceptionsFor(() => MethodThatCausesTheExceptionYouWantToIgnore());
//other stuff
}
catch(Exception e)
{
//do whatever
}
そうすれば、ある行を除くすべての行PreventExceptionsFor()
が通常どおり例外をスローし、内部の行PreventExceptionsFor()
は静かに渡されます。