在函数中初始化数组

时间:2014-02-17 02:23:13

标签: c# arrays function

嗨我有这样的代码

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' };

我失踪了?
或者如何正确地做到这一点?

2 个答案:

答案 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' };
}