我有这个方法(修改后的代码):
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
}
据我测试,它似乎是完全相同的,但事实确实如此吗? 我的意思是,“返回”语句让我们脱离了方法吗?
答案 0 :(得分:42)
这是完全等效的,第二个版本是要走的路:)
答案 1 :(得分:7)
是的,这绝对没问题。
有些人教条地坚持“每个方法一个出口点” - 这对于确保你总是在C中的函数结束时进行适当数量的清理是相当棘手的,例如..但是在C#中并不是必需的。
就我个人而言,我认为一旦你知道你已经完成了你真正想要的所有工作,就应该立即返回。使用try/finally
或using
语句执行任何额外的“清理,但我退出”工作。
答案 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%的时间内胜过纳秒级的性能。