首页 > 解决方案 > 为什么我收到无法访问的代码检测到错误

问题描述

我正在尝试编写一个检查何时p将等于的类p0。但是我不断收到警告CS0162: Unreachable code detected和错误,CS0161: 'Arge.NbYear(int, double, int, int)': not all code paths return a value.我尝试更改控制语句,但我无法正确处理。

class Arge
{
    public static int NbYear(int p0, double percent, int aug, int p)
    {
        // your code
        double percent_div = (percent <= 0.0) ? 0.0 : percent / 100.0;

        if (p0 < p)
        {
            for (int count = 0; p0 > p; count++)
            {
                var annual_increase = p0 * percent_div + aug;
                int annual_inc = Convert.ToInt32(annual_increase);

                p0 = p0 + annual_inc;

                return count;
            }
        }
        else
        {
            return 0;
        }                
    }
}

标签: c#

解决方案


考虑这种情况,当 for 循环根本不会运行时,那么这个方法会返回什么?编译器说的是同样的事情,因为如果流从不进入 for 循环,它就找不到任何逻辑流来返回任何值。

解决方案可以是在 for 循环之后放置 return 语句,也可以在方法末尾添加 return 语句,或者删除 else 子句并简单地将 return 语句放在那里。(从逻辑上讲,我建议删除 else 子句并简单地返回 0)

编辑:注释掉 else 语句的简单示例https://dotnetfiddle.net/Oywe1x(请原谅我的低质量编辑,因为我正在用手机回复)


推荐阅读