【问题标题】:CS0161: not all code paths return a valueCS0161:并非所有代码路径都返回值
【发布时间】:2021-11-08 06:25:30
【问题描述】:

在下面的 C# sn-p 中,我循环遍历所有整数,直到 x,并在找到 x 的除数时立即返回。

class Program
{   
        static void Main(string[] args)
        {

        }
        static int LowestDivisor(int x)
        {
            if (x < 0)
                x *= -1;
            if (x == 0 || x == 1)
                return -1;
            for (int i = 2; i <= x; i++)
            {
                if (x % i == 0)
                {
                    return i;
                }
            }
        }
    }
}

我看不出是什么导致编译器给出错误CS0161: not all code paths return a value。在素数的情况下,for 循环的最后一次迭代返回素数。如果不是,则将在较早的迭代中返回除数。因此,for all code paths 会返回一个值。我错了吗?

【问题讨论】:

    标签: c# compiler-errors return


    【解决方案1】:

    编译器无法知道ifs 中的一个最终将评估为true。在for 循环之后,您需要一些默认返回值,即使在实践中从未达到:

    static int LowestDivisor(int x)
    {
        if (x < 0)
            x *= -1;
        if (x == 0 || x == 1)
            return -1;
        for (int i = 2; i <= x; i++)
        {
            if (x % i == 0)
            {
                return i;
            }
        }
        // Should never happen...
        return x;
    }
    

    【讨论】:

      【解决方案2】:

      编译器不知道对于任何给定的输入,如果一个值尚未在前两个ifs 中捕获,它肯定会在for 循环中的某个点返回。

      它所看到的只是在某些时候有一个 for 和一个 if ,对于 x 的某些值将退出而不返回任何值。

      您可以在循环后添加return 0 或默认值,甚至可以在throw 中添加一个异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-29
        • 2011-12-17
        • 1970-01-01
        相关资源
        最近更新 更多