在 C# 中将引用数组作为参数传递
Pass reference array as argument in c#
亲爱的,
我已经创建了一个方法,在使用 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
的数组。在你的方法中,你迭代了 4、5 和 8 次,而你的 arrays
的长度为 1。你应该制作一个常量 pttSize
、indexSize
和 factorSize
和将它们用作 arrays
尺寸和 loops
长度。
您将长度为 1 的数组传递给函数,然后尝试访问大于 0 的索引。
调整您的 Main
方法以传递正确长度的数组:
string[] ptt = new string[4];
int[] index = new int[5];
double[] factor = new double[8];
您的数组大小均为 1,但您的循环分别为 4、5 和 8。相反,在循环中使用数组的 Length
属性:
for (int i = 0; i < patternName.Length; i++)
{
patternName[i] = "test";
}
这很有用,因为数组的大小仅位于一处(在创建数组时)。
亲爱的,
我已经创建了一个方法,在使用 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
的数组。在你的方法中,你迭代了 4、5 和 8 次,而你的 arrays
的长度为 1。你应该制作一个常量 pttSize
、indexSize
和 factorSize
和将它们用作 arrays
尺寸和 loops
长度。
您将长度为 1 的数组传递给函数,然后尝试访问大于 0 的索引。
调整您的 Main
方法以传递正确长度的数组:
string[] ptt = new string[4];
int[] index = new int[5];
double[] factor = new double[8];
您的数组大小均为 1,但您的循环分别为 4、5 和 8。相反,在循环中使用数组的 Length
属性:
for (int i = 0; i < patternName.Length; i++)
{
patternName[i] = "test";
}
这很有用,因为数组的大小仅位于一处(在创建数组时)。