为什么不能通过其他功能调整数组大小?

时间:2017-10-07 14:32:45

标签: c# arrays reference

根据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);
    }
}

1 个答案:

答案 0 :(得分:4)

  

如果所有数组都是引用类型,那么为什么在给定的示例代码中,   更改数组的大小必须使用关键字ref?

简单地说,因为Array.Resize分配了一个新数组。然后,它将现有元素值复制到新数组。所以为了确保更改影响首先传入Array.Resize的参数,我们必须使用ref。这也是因为,默认情况下,所有参数都是按值传递的,无论它是否是值类型的引用类型。