如果我有类似下面的方法,我可以在这里省略catch块以获得相同的结果吗?:
private ClassInstance GetMeANumber()
{
Resource a = null;
try
{
Resource a = new Resource();
return a.GetClassInstance();
}
catch
{
throw;
}
finally
{
if(a != null)
a.Dispose();
}
}
答案 0 :(得分:18)
是的,那将是完全相同的。
但是,更常见的模式是在Resource
上实施IDisposable。然后你可以使用using来更简洁地实现同样的事情。
using (Resource a = new Resource()) {
return a.GetClassInstance();
}
答案 1 :(得分:2)
“简单的重新抛出”捕获块将产生一些影响,您可能会或可能不会喜欢:
一般情况下,我认为上面指出的行为是不受欢迎的,但在某些情况下,即使外部未处理异常陷阱可能想要在之前杀死应用程序,也可能希望确保内部“finally”阻止运行结束外面的可以运行。
答案 2 :(得分:0)
正如您感兴趣的那样,您发布的代码模式几乎就是使用块转化为的内容。因此,您的代码可以重写为;
private ClassInstance GetMeANumber()
{
using (var a = new Resource())
{
return a.GetClassInstance();
}
}