是否可以执行以下操作:
我想捕获一个自定义异常并使用它做一些事情 - 简单: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 )......?
答案 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
或其他人工做法,可能更“混乱”和冗长的机制。