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

您需要使用两个try块:

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 回答