C#中的一般多回报声明问题

时间:2010-12-16 06:44:09

标签: c# return

如果我不需要命中块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,
}

2 个答案:

答案 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的方式更清楚。