重复捕获所有渔获量

时间:2013-05-30 15:27:56

标签: c# try-catch

是否可以执行以下操作:

我想捕获一个自定义异常并使用它做一些事情 - 简单: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 个答案:

答案 0 :(得分:5)

我通常会按照

的方式做点什么
try
{ 
    throw new CustomException("An exception.");
}
catch (Exception ex)
{
   if (ex is CustomException)
   {
        // Do whatever
   }
   // Do whatever else
}

答案 1 :(得分: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");
}

答案 2 :(得分: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);
}

答案 3 :(得分:0)

不,它没有这样做,你要么捕获一个特定的异常(线性)或一般化。如果您希望为所有例外运行某些内容,则需要记录是否已抛出异常,可能是什么等等,并使用finally或其他人工做法,可能更“混乱”和冗长的机制。