C#求最小除数函数报CS0161并非所有代码路径返回值错误原因求解
CS0161报错原因说明
你的判断存在错误,该报错是C#编译器的正常校验结果,具体原因如下:
- C#编译器的静态代码流分析仅做语法层面的可达性校验,不会推导业务逻辑的合理性。你从业务维度得出的「所有x≥2的场景都会在for循环内命中return」逻辑上是成立的,但编译器不会做这一层关联验证。
- 编译器只会识别到:如果for循环完整执行结束后没有命中return分支,方法就没有符合要求的int类型返回值,因此抛出
CS0161: not all code paths return a value错误。
修复方法
只需要在for循环结束后补充一行int返回语句即可,这行代码逻辑上永远不会被执行,仅用于满足编译器的静态检查要求:
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; } } // 补充返回值,仅用于满足编译器校验 return x; } }
内容的提问来源于stack exchange,提问作者Mussé Redi
相关产品推荐
相关产品推荐

