Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在返回语句之前使用if/else和just if有什么区别?_C#_Asp.net - Fatal编程技术网

C# 在返回语句之前使用if/else和just if有什么区别?

C# 在返回语句之前使用if/else和just if有什么区别?,c#,asp.net,C#,Asp.net,我发现很难找到这个问题 else语句会对下面的代码产生任何影响吗 public string Test() { if (statement) return "a"; else return "b"; } 在这种情况下,什么是好的做法?不。。。如果代码中没有else,它将执行相同的操作否,在这种情况下不会有任何区别,因为如果if语句为true,它将返回,并且永远不会转到返回“b”行,不考虑if 在这种情况下,我通常省略else,但我不知道大多数人在这种情况下是否会这样做。else可能

我发现很难找到这个问题

else语句会对下面的代码产生任何影响吗

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

在这种情况下,什么是好的做法?

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

否,在这种情况下不会有任何区别,因为如果if语句为true,它将返回,并且永远不会转到
返回“b”行,不考虑if


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

else可能没有必要,但我个人认为,增加一点可读性并平衡if逻辑是一个很小的代价。

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

 if(xx) return; else return;


 if(xx) return;
 return;

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

public string Test() {
    if (statement)
        return "a";
    return "b";
}
对于这样一个简单的情况,这两种变体都没有什么真正的错误,但将其与(例如)函数开头的四个检查(伪代码)进行对比:

与之相反:

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

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

没有区别,而且编译器可能会在这两种情况下发出相同的代码。另外,对于像您的示例这样的小检查,您可以始终使用以下()命令:


这一切都是关于如何生成最清晰的代码

就我个人而言,我觉得在大多数情况下,其他的修订会使代码更清晰,但其他人可能会有不同的感觉

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

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


这不会有任何区别。你应该写你喜欢的(ofc.坚持一种模式);)

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

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

无论如何,我不会保留else语句,但这主要是因为我使用了ReSharper,这会使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  
以及:


同意。像这样对块重新排序要比解开
if-then-else
链容易得多。颤抖
   public string Test()
    {   
            if (statement)
            {
                 return "a";
            }

            return "b";
    }
public string Test() {
   return statement ? "a" : "b";
}
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