HuB*_*eZa 2 .net c# exception-handling
在某些情况下,我们希望忽略特定的异常类型(通常ObjectDisposedException).可以通过这两种方法实现:
try
{
// code that throws error here:
}
catch (SpecificException) { /*ignore this*/ }
catch (Exception ex)
{
// Handle exception, write to log...
}
Run Code Online (Sandbox Code Playgroud)
要么
try
{
// code that throws error here:
}
catch (Exception ex)
{
if (ex is SpecificException) { /*ignore this*/ }
else
{
// Handle exception, write to log...
}
}
Run Code Online (Sandbox Code Playgroud)
这两种方法的优点和缺点是什么(关于性能,可读性等)?
我主要是说这是一个偏好的问题,但专用的emtpy catch对我来说看起来更干净.读取代码的程序员可以假设熟悉try/catch构造,并且他们希望您将catch块从特定到一般进行排序.人们阅读try/catch构造的通常方式是浏览捕获,直到找到与他们正在寻找的匹配的东西(就像编译器那样),然后看看它做了什么.阅读器无论如何都是这样做的,所以当你有一个专门的空捕获的异常类型时,很明显它是一个特殊情况,并且你正在丢弃异常.内置类型检查逻辑OTOH要求读者找到更一般的异常分支,它可能在catch块列表中,然后读取实际逻辑以找出发生的情况.我要说这需要比空捕获更多的阅读努力.
另一点是,你应该有理由忽略异常; 对于一个空的catch块,对于你和那些检查你的代码的人来说,你会忽略错误,这是很明显的 - 这很好 - 这意味着人们会注意到并且对这种潜在的陷阱有更多的意识,你会被推动添加一个解释为什么你这样做的评论.如果你将ignore-this-exception部分隐藏在处理程序逻辑中,人们可能会读过它然后想知道为什么他们的异常不会弹出任何地方.