7

次のようなことは可能ですか?

カスタム例外をキャッチして何かをしたい - 簡単:try {...} catch (CustomException) {...}

しかし、「catch all」ブロックで使用されているコードを実行したいのですが、すべての catch ブロックに関連する他のコードを実行します...

try
{
    throw new CustomException("An exception.");
}
catch (CustomException ex)
{
    // this runs for my custom exception

throw;
}
catch
{
    // This runs for all exceptions - including those caught by the CustomException catch
}

または、すべての例外ケースでやりたいことをすべて入れなければなりませんか(例外finallyに対してのみ実行したいので、オプションではありません)別のメソッド/ネスト全体のtry/catchを別のものに入れる必要があります(euch)... ?

4

4 に答える 4

7

私は一般的に次のようなことをします

try
{ 
    throw new CustomException("An exception.");
}
catch (Exception ex)
{
   if (ex is CustomException)
   {
        // Do whatever
   }
   // Do whatever else
}
于 2013-05-30T15:37:05.853 に答える
4

try2 つのブロック を使用する必要があります。

try
{
    try
    {
        throw new ArgumentException();
    }
    catch (ArgumentException ex)
    {
        Console.WriteLine("This is a custom exception");
        throw;
    }
}
catch (Exception e)
{
    Console.WriteLine("This is for all exceptions, "+
        "including those caught and re-thrown above");
}
于 2013-05-30T15:31:19.970 に答える
2

全体的なキャッチを実行して、例外がそのタイプであるかどうかを確認するだけです。

try
{
   throw new CustomException("An exception.");
}
catch (Exception ex)
{
   if (ex is CustomException)
   {
       // Custom handling
   }
   // Overall handling
}

または、両方が呼び出す全体的な例外処理のメソッドを用意します。

try
{
   throw new CustomException("An exception.");
}
catch (CustomException ex)
{
    // Custom handling here

    HandleGeneralException(ex);
}
catch (Exception ex)
{
   HandleGeneralException(ex);
}
于 2013-05-30T15:36:43.663 に答える
0

いいえ、このようにはしません。特定の例外を(線形に)キャッチするか、一般化します。すべての例外に対して何かを実行したい場合は、例外がスローされたかどうか、おそらくそれが何であったかなどの記録を保持する必要がありますfinally

于 2013-05-30T15:33:04.463 に答える