我有大约4个需要计算长度的int数组,分配给它们然后填充。 我试图通过使用带参数的函数来稀释代码,而不是重复4次长计算,但我似乎无法通过将数组指定为参数来设置长度。我试过类似下面的代码:
for(int i=0; i<4; i++)
if(i==0) SetLength(array1);
else if(i==1) SetLength(array2);
else if(i==2) SetLength(array3);
else if(i==3) SetLength(array4);
SetLength(int[] array)
{
//calculations for length here
//int result=...;
array = new int[result];
//getting info for populating the array
for(int i=0; i<result; i++)
array[i]=some_value[i];
}
除了长度分配部分之外,大多数代码似乎都有效。有什么想法吗?
答案 0 :(得分:5)
如果您需要在方法中重新分配数组并希望它更新您作为方法参数传递的变量,则必须创建参数ref
或out
:
SetLength(ref int[] array)
for(int i=0; i<4; i++)
if(i==0) SetLength(ref array1);
else if(i==1) SetLength(ref array2);
else if(i==2) SetLength(ref array3);
else if(i==3) SetLength(ref array4);
答案 1 :(得分:2)
答案 2 :(得分:1)
你可以在没有ref
修饰符的情况下进行,因为MarcinJuraszek建议像这样
for(int i=0; i<4; i++)
if(i==0) array1 = SetLength();
else if(i==1) array2 = SetLength();
else if(i==2) array3 = SetLength();
else if(i==3) array4 = SetLength();
int[] SetLength()
{
//calculations for length here
//int result=...;
var array = new int[result];
//getting info for populating the array
for(int i=0; i < result; i++)
array[i] = some_value[i];
return array;
}
顺便说一句,你真的不需要一个循环。对于您的原始代码
SetLength(array1);
SetLength(array2);
SetLength(array3);
SetLength(array4);
就足够了。