将C#数组作为函数参数传递以分配其内存不起作用

时间:2019-01-22 20:50:07

标签: c# arrays

由于将C#数组作为函数参数传递是按引用传递的,这意味着我可以在函数中修改数组。所以在这里,我试图在函数中分配和修改数组:

void caller() {
   int array[];
   doStuff(array);

   if (array != null) {
      // never reaches here, even when I allocated the array of size 0
   }
}

void doStuff(int[] array) {
   int[] tmp = new int[0];
   array = new int[tmp.Length];
}

问题在于,即使我分配了大小为0的数组,array != null检查也从未变为true。我已经在文档中确认new int[0]是有效的分配命令。我可能做错了什么?

2 个答案:

答案 0 :(得分:2)

除非您通过引用,否则这将永远行不通。

您的第一个变量为null,当您将其传递时,会将引用(按值!)传递为空。然后,您的方法会将其引用的副本分配给其他数组。那不会影响原始变量。

如果您希望它能正常工作,则必须通过引用(使用outref)通过。

答案 1 :(得分:-1)

由于数组已初始化(使用新的int命令),因此它永远不会为null,而只是声明的空白空间(无数据)。您可以在调用方方法的if中检查长度。