通过Return与If/Else控制流量

Ale*_*lex 17 c# coding-style control-flow

哪一个更好(通过if 返回或控制流的隐式控制流) - 见下文.请解释一下你认为哪个有利/不利.我喜欢选项A,因为它的代码更少.

流程返回:

public ActionResult Edit(MyClass class)
{
    if (!class.Editable)
       return null;

    class.Update();
    return View();
}
Run Code Online (Sandbox Code Playgroud)

通过If/Else流程:

public ActionResult Edit(MyClass class)
{
    if (class.Editable)
    {
       class.Update();
       return View();
    }
    else
    {
       return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

Bil*_*ard 27

这个具体的例子没什么区别,但总的来说我喜欢第一种方法,因为它使用了一个保护子句来提前返回.如果您开始向第二种方法添加嵌套条件,您将看到您的代码可读性会受到影响.Guard子句可以大大减少嵌套深度,并且真正增强了代码的可读性.

  • +1表示正确的术语.我也更喜欢保护条款的方法,但我不会得到太冒犯:) (2认同)

Eri*_*ric 10

我个人喜欢这种if/else方法.首先,你的if陈述是积极的,而不是消极的,使其更容易阅读.对于两个,你已经将条件封装在大括号中,我就是那种风格的粉丝.

无论如何,跟随第二个比第一个更容易.这总是在我的书中获胜.


Mat*_*vis 6

为了可读性和可维护性,我更喜欢第二种方法.可读性因为它比第一种方法对我来说更"干净",并且可维护性,因为如果我需要修改if或else子句,我不必担心添加花括号.此外,如果不包括新行,第一种方法只比第二种方法少7个字符,这几乎不是选择第一种方法的理由.

那就是说,我其实更喜欢这个:

public ActionResult Edit(MyClass class)
{
    ActionResult rv = null;
    if (class.Editable)
    {
        class.Update();
        rv = View();
    }
    return rv;
}
Run Code Online (Sandbox Code Playgroud)

这是更多的代码,但我现在可以在return语句上设置一个断点来检查返回的值,而不是必须设置两个断点来在你提供的两个选项中执行相同的操作.