You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中接收多维数组的方法调用报错,求问题原因排查

问题分析与修复方案

你的代码里有两个关键问题导致运行错误,我来逐一拆解:

1. 结果数组初始化错误

在FindLargest方法中,你把Larges初始化成了一个长度为0的空数组:

double[] Larges = new double[] {};

之后尝试通过Larges[i] = Nums.Max();给数组元素赋值时,会直接抛出IndexOutOfRangeException——因为数组根本没有预留足够的位置来存储每个子数组的最大值。

修复方式:
根据输入交错数组的长度提前初始化结果数组:

double[] Larges = new double[NumsInNums.Length];

2. 交错数组的初始化语法错误

在Main方法调用FindLargest时,你用了{{4, 2, 7, 1}, {20, 70, 40, 90}, {1, 2, 0}}这种写法,这不符合C#中**交错数组(Jagged Array)**的初始化规则。交错数组本质是"数组的数组",每个子数组都需要显式声明为double[]类型。

修复方式:
修正调用时的数组初始化语法:

double[] nums = FindLargest( new double[][] {
    new double[] {4, 2, 7, 1},
    new double[] {20, 70, 40, 90},
    new double[] {1, 2, 0}
} );

完整修复后的代码

using System;
using System.Linq; // 需要引入Linq才能使用Nums.Max()方法

class Program
{
    static double[] FindLargest(double[][] NumsInNums)
    {
        // 提前根据输入长度初始化结果数组
        double[] Larges = new double[NumsInNums.Length];
        int i = 0;
        foreach (double[] Nums in NumsInNums)
        {
            Larges[i] = Nums.Max();
            i++;
        }
        return Larges;
    }

    static void Main(string[] args)
    {
        // 修正交错数组初始化语法
        double[] nums = FindLargest(new double[][] {
            new double[] {4, 2, 7, 1},
            new double[] {20, 70, 40, 90},
            new double[] {1, 2, 0}
        });
        foreach (double num in nums)
        {
            Console.WriteLine(num);
        }
    }
}

另外补充一点:如果你的项目没有默认引入Linq,记得在代码顶部加上using System.Linq;,否则Nums.Max()方法会编译报错。

内容的提问来源于stack exchange,提问作者user13810842

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 08:17:38