根据MSDN,如果所有数组都是引用类型,那么为什么在给定的示例代码中,要更改数组的大小必须使用关键字ref
?谢谢!
class Program
{
static void Main(string[] args)
{
int[] test1 = { 1, 2, 3, 4 };
ResizeArray1(test1);
Console.WriteLine("Size 1 new = " + test1.Length); // Size 1 new = 4 ??
int[] test2 = { 1, 2, 3, 4 };
ResizeArray2(ref test2);
Console.WriteLine("Size 2 new = " + test2.Length); // Size 2 new = 8
Console.ReadKey();
}
static void ResizeArray1(int[] arr)
{
Array.Resize(ref arr, 8);
}
static void ResizeArray2(ref int[] arr)
{
Array.Resize(ref arr, 8);
}
}
答案 0 :(得分:4)
如果所有数组都是引用类型,那么为什么在给定的示例代码中, 更改数组的大小必须使用关键字ref?
简单地说,因为Array.Resize
分配了一个新数组。然后,它将现有元素值复制到新数组。所以为了确保更改影响首先传入Array.Resize
的参数,我们必须使用ref
。这也是因为,默认情况下,所有参数都是按值传递的,无论它是否是值类型的引用类型。