7

私はいくつかの例外をキャッチしたくありません。どういうわけかできますか?

私はこのようなことを言うことができます:

catch (Exception e BUT not CustomExceptionA)
{
}

4

6 に答える 6

21
try
{
      // Explosive code
}
catch (CustomExceptionA){ throw; }
catch (Exception ex)
{
    //classic error handling
}
于 2012-09-06T13:47:51.423 に答える
9
try
{
}
catch (Exception ex)
{
    if (ex is CustomExceptionA)
    {
        throw;
    }
    else
    {
        // handle
    }
}
于 2012-09-06T13:46:41.510 に答える
6

C#6以降では、例外フィルターを使用できます。

try
{
    // Do work
}
catch (Exception e) when (!(e is CustomExceptionA))
{
    // Catch anything but CustomExceptionA
}
于 2017-03-29T16:37:13.390 に答える
3

あなたはそれをフィルタリングすることができます:

if (e is CustomExceptionA) throw;

そしてもちろん、あなたはそれを捕まえてそれを投げ直すことができます:

try
{
}
catch (CustomExceptionA) { throw; }
catch (Exception ex) { ... }
于 2012-09-06T13:46:43.500 に答える
2

まず、ログに記録して再スローしない限り、例外をキャッチすることはお勧めできません。ただし、必要な場合は、カスタム例外をキャッチして、次のように再スローする必要があります。

try
{
}
catch (CustomExceptionA custome)
{
    throw custome;
}
catch (Exception e)
{
    // Do something that hopefully re-throw's e
}
于 2012-09-06T13:47:18.163 に答える
-1

コメントで@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()は静かに渡されます。

于 2012-09-06T13:48:26.617 に答える