写这个if..then逻辑的最干净的方法是什么?

Mik*_*osa 8 c# coding-style

他们都做同样的事情.一种方式更好吗?显然,如果我编写代码,我会知道我做了什么,但其他人如何阅读呢?

if (!String.IsNullOrEmpty(returnUrl))
{
    return Redirect(returnUrl);
}
return RedirectToAction("Open", "ServiceCall");
Run Code Online (Sandbox Code Playgroud)

要么

if (!String.IsNullOrEmpty(returnUrl))
{
   return Redirect(returnUrl);
}
else
{
    return RedirectToAction("Open", "ServiceCall");
}
Run Code Online (Sandbox Code Playgroud)

And*_*ngs 30

return String.IsNullOrEmpty(returnUrl) ? 
            RedirectToAction("Open", "ServiceCall") : 
            Redirect(returnUrl);
Run Code Online (Sandbox Code Playgroud)

我更喜欢.

或替代方案:

return String.IsNullOrEmpty(returnUrl)  
            ? RedirectToAction("Open", "ServiceCall")  
            : Redirect(returnUrl);
Run Code Online (Sandbox Code Playgroud)

  • 这比问题中列出的任一选项都要差. (6认同)

Gav*_*ler 24

我认为最好删除not(否定)并首先得到肯定的断言:

if (String.IsNullOrEmpty(returnUrl))
{
   return RedirectToAction("Open", "ServiceCall");
}
else
{
    return Redirect(returnUrl);
}
Run Code Online (Sandbox Code Playgroud)

-要么-

// Andrew Rollings solution
return String.IsNullOrEmpty(returnUrl) ? 
                    RedirectToAction("Open", "ServiceCall") : 
                    Redirect(returnUrl);
Run Code Online (Sandbox Code Playgroud)


kro*_*old 21

一个风格问题:

if (String.IsNullOrEmpty(returnUrl))
{
    return RedirectToAction("Open", "ServiceCall");
}
return Redirect(returnUrl);
Run Code Online (Sandbox Code Playgroud)

当你取消双重否定时,无论你选择哪种支撑方式,它都会读得更好.读得更好的代码总是最好的;)

  • 在所有变化中,我最喜欢这个.它干净,一致,明显且易读. (2认同)

Sco*_*den 9

第二种方式更好,没有混淆你的意思......


Dan*_*ana 9

我认为这是一个相当小的风格问题.我认为你的两个样本同样可读.

我更喜欢前者,但其他人只喜欢一个函数的一个退出点,可能会建议:

if (!String.IsNullOrEmpty(returnUrl))
{
   result = Redirect(returnUrl);
}
else
{
    result = RedirectToAction("Open", "ServiceCall");
}

return result;
Run Code Online (Sandbox Code Playgroud)


rec*_*ive 5

我喜欢第一个例子,因为这个摘录更明显地返回.如果两者return都是缩进的块,那么需要花费更多的心理努力才能分辨出来.