C#返回int数组时输出System.Int32[]的原因及代码问题排查
问题定位
你遇到的两个异常分别对应两个独立的代码问题:
- 控制台输出
System.Int32[]:直接将数组对象传入Console.WriteLine()时,.NET会调用数组默认的ToString()方法,该方法不会遍历展示数组元素,只会返回数组的类型全名字符串,这是C#的默认行为,不是数组内容异常。 - 返回结果不符合预期:你在生成正确的唯一值排序数组
r后,又在foreach循环里反复用错误的排序逻辑覆盖r的值:OrderBy(item => item2)的排序依据是固定的循环变量item2,而非元素本身,且这个循环本身是完全多余的逻辑,直接破坏了已经生成的正确结果。
修正代码
你原本的分组筛选唯一值的逻辑是正确的,只需要删除多余的循环覆写逻辑,调整数组打印方式即可:
public static int[] Unique(int[] arr) { // 分组筛选出现次数为1的元素,按数值升序排序后转数组 int[] result = arr.GroupBy(n => n) .Where(group => group.Count() == 1) .Select(group => group.Key) .OrderBy(num => num) .ToArray(); // 正确打印数组:用string.Join拼接元素为可读字符串 Console.WriteLine($"结果数组:[{string.Join(", ", result)}]"); return result; }
调用该方法传入[2,3,2,6,2]时,会正确返回[3,6],控制台也会输出可读的数组内容,不再显示类型名称。
内容的提问来源于stack exchange,提问作者MjSudo
相关产品推荐
相关产品推荐

