并非所有代码路径都通过while循环返回值

时间:2018-08-14 12:04:39

标签: c# compiler-errors return return-value

编译器抱怨以下代码片段不会总是返回。我已经检查过了,没有看到问题。

private int MyFunction(int b)
{
    int result = -1;

    while (result != 1)
    {
        result = MySmallFunction(out var x);

        if (result == 1)
        {
            return x;
        }
    }
}

private int MySmallFunction(out int x)
{
    x = 1;
    return 1;
}

MySmallFunction进行填充并返回一个代码,1表示成功,其余为错误代码。

如果返回1,则表示out int x有一个值。 如果返回值不是1(错误代码),那么我想重试。

如果MySmallFunction从不返回1,则应用程序应该永远陷入循环。对于编译器来说这应该不是问题。

3 个答案:

答案 0 :(得分:1)

我将函数重写为此:

private int MyFunction()
{
    int result = -1;
    int x = int.MinValue;

    while (result != 1)
    {
        result = MySmallFunction(out x);
    }

    return x;
}

private int MySmallFunction(out int x)
{
    x = 1;
    return 1;
}

现在,x仅在MySmallFunction返回状态代码1时返回。

答案 1 :(得分:0)

根据方法MyFunction()的签名,在所有情况下都应向调用方法返回一个值。但在您的情况下,您仅返回if (result == 1)的值,而在其他所有情况下该值都是无效的,因此您必须在最后添加一个返回值,这将返回一个整数。因此,您必须更改以下内容:

private int MyFunction(int b)
{
    int result = -1;

    while (result != 1)
    {
        result = MySmallFunction(out var x);

        if (result == 1)
        {
            return x;
        }
    }
    return 0;
}

答案 2 :(得分:0)

如果您的while循环没有触发,没有返回指令,那么您需要在while循环之外的函数底部返回一个值。