数组是引用类型,因此您可以传递对该数组的引用。例如,给定以下程序:
public class Program
{
public static Random rnd = new Random();
public static int[] array2;
public static void Main()
{
int[] array = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
PrintArray(array);
array[4] = rnd.Next();
PrintArray(array);
ModArray(array, 2);
PrintArray(array);
array2 = array; //This makes array2 reference array1
ModArray(array2, 8); //Operate on the array2 reference
PrintArray(array); //Changes are reflected in array
PrintArray(array2); //And in array2
Console.ReadKey(true);
}
public static void PrintArray(int[] array)
{
foreach (var e in array)
Console.Write(e + ", ");
Console.WriteLine();
}
public static void ModArray(int[] array, int i)
{
array[i] = rnd.Next();
}
}
将给出以下输出:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
所以从某种意义上说,您可以传递对数组的引用,修改该引用,并将其反映在其所有副本中。
这里需要注意的是,任何“拥有”对原始数组的引用的人都不能重新分配该数组(或调整它的大小)。它可以修改数组的元素,但它不能使原始数组指向一个新实例(这是调整大小时发生的情况)。此外,正如 Jon Skeet 在他的评论中提到的那样,危险在于,如果您使用 Main 以外的其他方法执行此操作,如果 array 超出范围,array2 会发生什么情况?
另见:
Is int[] a reference type or a value type?
Are arrays or lists passed by default by reference in c#?