为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
汪汪一只猫 2021-11-28 15:59:39
编译器抱怨以下代码片段不会总是返回。我已经检查过了,没有发现问题。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 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

我将函数改写为:


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.


查看完整回答
反对 回复 2021-11-28
?
慕后森

TA贡献1802条经验 获得超5个赞

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

}


查看完整回答
反对 回复 2021-11-28
?
湖上湖

TA贡献2003条经验 获得超2个赞

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


查看完整回答
反对 回复 2021-11-28
  • 3 回答
  • 0 关注
  • 219 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信