C#返回数组时出现“并非所有代码路径都返回值”错误求助
解决C#中“并非所有代码路径都返回值”错误及代码逻辑问题
问题拆解
- 返回值路径不完整:C#编译器要求所有代码分支必须明确返回值,哪怕循环理论上一定会执行,也需要在循环外补充默认返回逻辑。
- 数组未初始化:
int[,] route = { };创建了空二维数组,直接访问route[i,j]会触发索引越界异常,必须先指定数组大小。 - 返回类型不匹配:你声明要返回数组,但函数定义是
public int Route(...),需改为返回二维数组类型int[,]。 - 逻辑错误:else分支后的
route[j, i] = ...会覆盖前面所有条件的赋值;循环内的return会让函数在第一次迭代就直接返回,无法完成整个数组的计算。
修正后的代码
[HttpGet] [Route("api/J3/Distance/{city1}/{city2}/{city3}/{city4}")] public int[,] Route(int city1, int city2, int city3, int city4) { int[] city = { city1, city2, city3, city4 }; // 初始化5x5的二维数组,匹配循环范围 int[,] route = new int[5, 5]; int i, j; for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) { if (i == j) route[i, j] = 0; else if (Math.Abs(i - j) == 1) { route[i, j] = city[i]; route[j, i] = city[i]; } else if (Math.Abs(i - j) == 2) { int sum = city[i] + city[i + 1]; route[i, j] = sum; route[j, i] = sum; } else if (Math.Abs(i - j) == 3) { int sum = city[i] + city[i + 1] + city[i + 2]; route[i, j] = sum; route[j, i] = sum; } else { int sum = city[i] + city[i + 1] + city[i + 2] + city[i + 3]; route[i, j] = sum; route[j, i] = sum; } } } // 循环完成后返回完整数组 return route; }
额外注意
当i=4时,i+1会超出city数组的索引范围(city只有4个元素,索引0-3),需根据你的实际业务逻辑调整边界处理逻辑。
内容的提问来源于stack exchange,提问作者Flora Jiang
相关产品推荐
相关产品推荐

