由于将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]
是有效的分配命令。我可能做错了什么?
答案 0 :(得分:2)
除非您通过引用,否则这将永远行不通。
您的第一个变量为null,当您将其传递时,会将引用(按值!)传递为空。然后,您的方法会将其引用的副本分配给其他数组。那不会影响原始变量。
如果您希望它能正常工作,则必须通过引用(使用out
或ref
)通过。
答案 1 :(得分:-1)
由于数组已初始化(使用新的int命令),因此它永远不会为null,而只是声明的空白空间(无数据)。您可以在调用方方法的if中检查长度。