在return语句前使用if/else与只使用if的区别

本文关键字:if 区别 else 语句 return | 更新日期: 2023-09-27 18:05:56

我发现很难搜索这个问题。

else语句在下面的代码中有什么不同吗?

public string Test()
{
  if (statement) return "a";
  else return "b";
}  

在这种情况下什么是好的实践?

在return语句前使用if/else与只使用if的区别

不,在这种情况下没有任何区别,因为如果if语句为真,它将返回并且无论if如何都不会转到return "b";行。

在这种情况下,我通常省略else,但我不知道这是否是大多数人在这种情况下会做的。

没有区别,实际上它们都编译成相同的IL:

public bool GetValue(bool input)
{
    if (input) return true;
    return false;
}
IL_0000:  ldarg.1     
IL_0001:  brfalse.s   IL_0005
IL_0003:  ldc.i4.1    
IL_0004:  ret         
IL_0005:  ldc.i4.0    
IL_0006:  ret  

:

public bool GetValue2(bool input)
{
    if (input)
        return true;
    else
        return false;
}
IL_0000:  ldarg.1     
IL_0001:  brfalse.s   IL_0005
IL_0003:  ldc.i4.1    
IL_0004:  ret         
IL_0005:  ldc.i4.0    
IL_0006:  ret   

else可能是不必要的,但我个人认为这是为了增加一点可读性和平衡if逻辑而付出的小代价。

没有区别,编译器可能会在两种情况下发出相同的信息。顺便说一句,对于像您的示例这样的小检查,您总是可以使用以下(条件运算符):

public string Test()
{
    return statement ? "a" : "b";
}  

代码越清晰越好。

我个人认为,在大多数情况下,冗余的else使代码更清晰,但其他人可能有不同的感觉。

无论哪种方式,我个人都会在if/else中使用括号,但其他人可能会觉得这会使代码过于冗长。

   public string Test()
    {   
            if (statement)
            {
                 return "a";
            }
            else 
            {
                 return "b";
            }   
    }

   public string Test()
    {   
            if (statement)
            {
                 return "a";
            }
            return "b";
    }

没有区别,但在这种特殊情况下,我的偏好是:

public string Test() {
   return statement ? "a" : "b";
}

在任何情况下,我都不会保留else语句,但这主要是因为我使用ReSharper,它模糊了else语句,我对这类事情有点强迫症。

我通常更喜欢没有else的变体。虽然它们在功能上相同,但else版本有时会导致大量缩进。

public string Test() {
    if (statement)
        return "a";
    return "b";
}

对于这样一个简单的情况,任何一种变体都没有什么错,但是将它与(例如)在函数开始时进行四次检查(伪代码)进行对比:

define fn():
    if error condition 1:
        handle error 1
    else:
        if error condition 2:
            handle error 2
        else:
            if error condition 3:
                handle error 3
            else:
                if error condition 4:
                    handle error 4
                else:
                    do something

相对于:

define fn():
    if error condition 1:
        handle error 1
        return
    if error condition 2:
        handle error 2
        return
    if error condition 3:
        handle error 3
        return
    if error condition 4:
        handle error 4
        return
    do something

在我看来,后者是"更干净"的代码。

这没什么区别。你应该怎么写就怎么写。

不…如果代码中没有else,它将执行相同的操作

No。它们在逻辑上是相同的。

 if(xx) return; else return;

 if(xx) return;
 return;