由于将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]
是一个有效的分配命令。我能做错什么?
除非你通过引用传递,否则这将永远不会奏效。
您的第一个变量为null,当您传递它时,您将引用(按值!)传递给任何内容。您的方法比将其引用副本分配给其他数组。这不会影响原始变量。
如果你想要它工作,你必须实际通过引用传递(使用out
或ref
)。
因为数组已初始化(使用new int命令),所以它永远不会为null,只是一个声明的空白空间(没有数据)。您可以在if中检查调用方法的长度。