摆脱虚空方法?

时间:2012-01-18 15:23:42

标签: c# coding-style

我有这个方法(修改后的代码):

public static void PublishXmlForCustomTypes(MyOwnClass DefaultOutputInformation)
{
    if (DefaultOutputInformation != null)
    {
        ///lot of code
    }
}

我的整个代码都在if语句中,在考虑之后,我改为:

public static void PublishXmlForCustomTypes(MyOwnClass DefaultOutputInformation)
{
    if (DefaultOutputInformation == null)
    {
        return;
    }
    ///lot of code
}

据我测试,它似乎是完全相同的,但事实确实如此吗? 我的意思是,“返回”语句让我们脱离了方法吗?

9 个答案:

答案 0 :(得分:42)

这是完全等效的,第二个版本是要走的路:)

答案 1 :(得分:7)

是的,这绝对没问题。

有些人教条地坚持“每个方法一个出口点” - 这对于确保你总是在C中的函数结束时进行适当数量的清理是相当棘手的,例如..但是在C#中并不是必需的。

就我个人而言,我认为一旦你知道你已经完成了你真正想要的所有工作,就应该立即返回。使用try/finallyusing语句执行任何额外的“清理,但我退出”工作。

答案 2 :(得分:4)

是的return让你退出方法;如果您有finally块并且从try块调用return,则无论如何都会执行finally块。

答案 3 :(得分:3)

是的, return 语句结束了该方法。

答案 4 :(得分:2)

是的,退货将退出代码。这通常是一个很好的做法,作为函数中的第一步,验证传入的参数是否是您认为的并退出(通过返回或抛出异常),这样您就不会进行任何不必要的处理不得不在功能中稍后中止。

答案 5 :(得分:1)

是的,您的假设是正确的。

对于某些背景知识,请了解duality

答案 6 :(得分:1)

是的,它完全相同,您可以阅读有关关键字返回的MSDN文档,以完全了解其工作原理:http://msdn.microsoft.com/en-us/library/1h3swy84.aspx

至于决定哪种方式更好:两者都很好,但第二个版本使它更具可读性,因为那时你的整个代码都不在if块中。通过这种方式,您可以轻松地查看条件的作用,而不是阅读方法的整个代码。

答案 7 :(得分:1)

确实return让你退出方法,所以它等同于你使用的第一种方式。哪种方式更好取决于您的代码,虽然通常我更喜欢第二个版本。

答案 8 :(得分:1)

查看修订后的代码,第二个是要走的路。虽然在功能上是等效的,但请考虑将4个不同变量传递给要检查的函数的情况。而不是在{到处都有一个令人讨厌的4级if语句,第二种方法允许你清理代码的外观而不添加不必要的括号级别。如果您正在使用C / C ++编写,您甚至可以将其设置为VERYIFY_NOT_NULL(x)等宏,并使代码更加整洁。

可读/可维护的代码在99%的时间内胜过纳秒级的性能。