猿问

并非所有代码路径都返回带有 while 循环的值

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


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,则应用程序应该永远停留在循环中。这对编译器来说应该不是问题。




汪汪一只猫
浏览 220回答 3
3回答

芜湖不芜

我将函数改写为: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;}Nowx仅在返回MySmallFunction状态代码1.

慕后森

根据方法的签名,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;}

湖上湖

如果您的 while 循环没有触发,则没有 return 指令,您需要在 while 循环之外的函数底部返回一个 return 。
随时随地看视频慕课网APP
我要回答