C# 在返回语句之前使用if/else和just if有什么区别?
我发现很难找到这个问题 else语句会对下面的代码产生任何影响吗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可能
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