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

问题描述 投票:1回答:2

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

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

问题是array != null检查永远不会证明是真的,即使我已经分配了一个大小为0的数组。我已经在文档中证实new int[0]是一个有效的分配命令。我能做错什么?

c# arrays
2个回答
2
投票

除非你通过引用传递,否则这将永远不会奏效。

您的第一个变量为null,当您传递它时,您将引用(按值!)传递给任何内容。您的方法比将其引用副本分配给其他数组。这不会影响原始变量。

如果你想要它工作,你必须实际通过引用传递(使用outref)。


-1
投票

因为数组已初始化(使用new int命令),所以它永远不会为null,只是一个声明的空白空间(没有数据)。您可以在if中检查调用方法的长度。

© www.soinside.com 2019 - 2024. All rights reserved.