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

C#传递ref数组作为方法参数时报IndexOutOfRangeException如何修复

错误原因

你遇到的System.IndexOutOfRangeException由数组实际长度小于访问的索引值导致:

  • Main方法中初始化的三个数组长度均为1,仅允许访问索引为0的元素
  • getarrays方法的内部循环需要分别向三个数组写入4、5、8个元素,访问了超出数组边界的索引,直接触发越界报错

解决方法

方案1:修改外部数组初始化长度(适合固定长度业务场景)

直接将Main方法中数组的初始化长度调整为方法内需要的长度即可:

static void Main(string[] args)
{
    string[] ptt = new string[4];
    int[] index = new int[5];
    double[] factor = new double[8];
    getarrays(ref ptt,ref index, ref factor);
}

方案2:方法内部初始化数组(更稳妥,避免外部传参出错)

因为参数使用了ref修饰符,方法内部给数组重新分配的空间会同步到外部调用变量,不需要外部提前感知数组长度要求:

public static int getarrays(ref string[] patternName, ref int[] loadindex, ref double[] loadFactor)
{
    int status = 0;
    // 方法内部先初始化对应长度的数组
    patternName = new string[4];
    loadindex = new int[5];
    loadFactor = new double[8];
    
    for (int i = 0; i < 4; i++)
    {
        patternName[i] = "test";
    }
    for (int i = 0; i < 5; i++)
    {
        loadindex[i] = i;
    }
    for (int i = 0; i < 8; i++)
    {
        loadFactor[i] = i/10.0;
    }
    return status;
}

额外提示:原代码中loadFactor[i] = i/10的i为int类型,直接除以10会走整数除法,所有小于10的i计算结果都是0,如需得到小数结果改为i/10.0即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:18:03