嗨我有这样的代码
int[] n1 = new int[] {2, 4, 6, 8};
char[] n2 = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' };
我想将2个变量传递给函数 像这样
public static void myTest(int[] n1, char[] n2)
{
.........
}
问题是我无法使用此代码初始化函数中的数组
n1 = {2, 4, 6, 8};
n2 = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' };
//or with this one
n1[] = {2, 4, 6, 8};
n2[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' };
我失踪了?
或者如何正确地做到这一点?
答案 0 :(得分:2)
您只能在创建数组时使用数组初始化语法。
您可以使用新内容创建新的内容:
n1 = new[] {2, 4, 6, 8};
n2 = new[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' };
<强>更新强>
但是,它不会更新您作为参数传递给方法的变量。要实现这一目标,您必须使用ref
关键字
public static void myTest(ref int[] n1, ref char[] n2)
{
n1 = new[] {2, 4, 6, 8};
n2 = new [] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' };
}
答案 1 :(得分:1)
您不应在此处使用ref
关键字,而应使用out
关键字。这是为什么?
使用ref
时,您需要在将值传递给方法之前对其进行初始化 - 例如像这样:
var arrayInt = new int[0];
var arrayChar = new char[0];
MyTest(ref arrayInt, ref arrayChar);
将MyTest
定义为MyTest(ref int[] n1, ref char[] n2) { ... }
。
使用out
关键字时,您可以将单位化值传递给方法:
int[] arrayInt;
char[] arrayChar;
MyTest(out arrayInt, out arrayChar);
MyTest
定义如下:
public static void MyTest(out int[] n1, out char[] n2)
{
n1 = new[] {2, 4, 6, 8};
n2 = new[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I' };
}