在c#中将引用数组作为参数传递[重复]

Posted

技术标签:

【中文标题】在c#中将引用数组作为参数传递[重复]【英文标题】:Pass reference array as argument in c# [duplicate] 【发布时间】:2021-12-05 07:56:18 【问题描述】:

亲爱的,

我创建了一个方法,该方法将在使用 ref 选项填充三个数组后检索它们

出现以下错误“System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'”

代码如下。我该如何解决它

 namespace ConsoleApp9

    class Program
    
        public static int getarrays(ref string[] patternName, ref int[] loadindex, ref double[] loadFactor)
        
            int status = 0;
            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;
            
            return status;
        
        static void Main(string[] args)
        
            string[] ptt = new string[1];
            int[] index = new int[1];
            double[] factor = new double[1];
            getarrays(ref ptt,ref index, ref factor);
        
    

【问题讨论】:

【参考方案1】:

您正在传递固定大小为1 的数组。在您的方法中,您将迭代 4、5 和 8 次,而您的 arrays 的长度为 1。您应该创建 pttSizeindexSizefactorSize 的常量并将它们用作 arrays 大小和loops 长度。

【讨论】:

【参考方案2】:

您将长度为 1 的数组传递给函数,然后尝试访问大于 0 的索引。

调整您的 Main 方法以传递正确长度的数组:

string[] ptt = new string[4];
int[] index = new int[5];
double[] factor = new double[8];

【讨论】:

【参考方案3】:

您的数组的大小均为 1,但您的循环分别为 4、5 和 8。相反,请在循环中使用数组的 Length 属性:

for (int i = 0; i < patternName.Length; i++)

    patternName[i] = "test";

这很有帮助,因为数组的大小只位于一个位置(在创建数组时)。

【讨论】:

以上是关于在c#中将引用数组作为参数传递[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C#中数组作为参数传递的问题

在 C# 中传递数组参数:为啥它是通过引用隐式传递的?

在 C# 中将 lambda 函数作为命名参数传递

如何在 C# 函数中将 jquery 变量作为参数传递

在函数c ++中将变量作为默认参数传递[重复]

在bash中将数组作为参数传递