我有一种管理异常处理的方法。问题是,如果typeof
例外是我们的观点,建议采用哪种方法?使用
catch (System.Exception ex) when(ex.GetType() ==typeof(ExcOneException)){...}
或
catch (ExcOneException ex) {...}
public T MyMethod<T>(Func<T> codeToExecute)
{
try
{
return codeToExecute.Invoke();
}
catch (System.Exception ex) when(ex.GetType() ==typeof(ExcOneException) )
{
throw new ExcOneException(ex.Message,ex);
}
catch (System.Exception ex)
{
throw new ExcTwoException(ex.Message, ex);
}
}
更新:我的解决方案有3个项目,UI,服务和DataAccess。每个部分都有其自己的自定义异常手术类。想象一下,有关的代码在服务项目中。所有代码均应调用此方法进行执行。如果具有ExconeException类型的运行时错误,则意味着该错误在服务部分,否则,数据访问部件中应该存在错误;因此,应抛出Exctwoexception。这种方法可以帮助我将错误降至UI级别,并提供详细信息。我不知道的是,在我们可以使用C#6属性的情况下,当我仅在异常类型上进行过滤时,哪种方法是更好的,当或提及异常类型作为捕获的参数时,哪种方法是更好的?
简化&amp;可读性:
您可以使用is
过滤,而不是typeof
:
catch (Exception ex) when (ex is ExcOneException) { ... }
链多种异常类型:
catch (Exception ex) when (ex is ExcOneException || ex is ExcTwoException) { ... }
您为什么要考虑?您提到性能。您是否有任何使您可疑的测量值。
有例外过滤器,用于过滤异常,您无法按类型捕获,这不是您的情况。
在您的代码中,您也不会重新捕获捕获的例外。您正在抛出一个新的例外例外,这是一个内部例外,这就是您想用更有意义的例外情况包裹的例外。
如果您打算重新启动,则正确的代码是:
catch (System.Exception ex)
{
throw;
}