所以,我遇到了一些代码,今天上午这个样子就来了:

try
{
    x = SomeThingDangerous();
    return x;
}
catch (Exception ex)
{
    throw new DangerousException(ex);
}
finally
{
    CleanUpDangerousStuff();
}

现在这个代码编译罚款和工作,因为它应该,但它只是感觉不对的try块内返回,尤其是如果有一个最后有关。

我的主要问题是,如果最终抛出它自己的异常,会发生什么?你已经有了一个返回的变量,但也异常处理......所以我想知道别人的想法有关从try块中返回?

有帮助吗?

解决方案

没有,这不是一个不好的做法。把return在有意义提高可读性和可维护性,使你的代码更容易理解。你不应该在乎仿佛遇到finally声明return块将得到执行。

其他提示

在最后将不管执行什么,所以也无所谓。

就个人而言,我会避免这种编码,因为我不喜欢最后陈述之前看到return语句。

我的头脑很简单,它处理的事情,而线性。因此,当我走过干运行的代码,我会倾向于认为,一旦我能到达return语句,后续的一切都无所谓,这显然是非常错误的在这种情况下(不在于它会影响return语句,但什么副作用可能是)。

因此,我会安排的代码,以便return语句总是在最后陈述后出现。

这可以回答你的问题。

真的发生在什么尝试{返回X;最后} {X = NULL; }语句?

从阅读这个问题听起来好像你可以在最后声明中另一次尝试catch结构,如果你认为它可能会抛出异常。编译器将计算出何时返回值。

这就是说,它可能会更好反正调整你的代码只是所以它不会混淆你以后还是别人谁可能没有意识到这一点。

功能是没有区别的。

然而,有一个原因不这样做。与几个出口点更长的方法通常是阅读和分析更加困难。但是,反对有更多的事情要做比渔获物和finally块return语句。

在您的示例任一方式是等价的,我会如果编译器产生的相同的代码甚至不感到惊讶。如果有异常的情况发生finally块你有同样的问题,无论你把return语句块或者它的外面。

真正的问题是在风格这是最好的。我喜欢写我的方法,使只有一个return语句,这样更容易看到流出来的方法,它遵循的是我也想过去把return语句,所以很容易地看到,这是该方法的端部与此它返回什么。

我觉得跟return语句,以便整齐地摆放在最后陈述,别人都不太可能来洒多个语句返回到方法的其他部分。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top