如果我不需要命中块2,如何返回值。
有意义吗?我想我不应该使用多return
,但我不能用break
替换它。 没有封闭的循环,可以打破或继续。
public EnResult MyFun()
{
bool bRet = default;
// block1 . higher priority than block2.
if (true)
{
// if bRet = true_1, not need hit block2. That's why I want to nested my code with multi *return*
return bRet = true_1;
}
else
{
// do nothing
}
// block2
if (true)
{
return bRet = true_2;
}
else
{
// do nothing
}
return bRet;
}
public enum EnResult
{
true_1,
true_2,
false_1,
false_2,
default,
}
答案 0 :(得分:10)
每种方法使用多个return语句根本不是很差的编码风格。将自己限制为一个return语句在C语言中是有意义的,您可能需要goto
一些可以释放指针等的常用清理代码,然后返回存储在变量中的值。但在C#中,这不是必需的。
我一直用多个return语句编写方法。我更愿意读取一个用多个return语句编写的方法,其中逻辑流是明确的,而不是读取一个用一个return语句编写的方法和一些模糊的逻辑。
答案 1 :(得分:1)
如果您不想使用“多次退货”:
public EnResult MyFun()
{
// I changed 'default' to 'None' because I wasn't sure if it compiled
EnResult result = EnResult.None;
// block1 . higher priority than block2.
if (true)
{
result = EnResult.true_1;
}
else
{
// do nothing
}
// block2
if (result == EnResult.None)
{
if (true)
{
result = EnResult.true_2;
}
else
{
// do nothing
}
}
return result;
}
public enum EnResult
{
None,
true_1,
true_2,
false_1,
false_2,
}
我更喜欢使用多个return语句(原始代码)。 IMO的方式更清楚。