C#数组参数引用

这个问题在这里已经有了答案:

  • 在C#7答案中通过引用或值传递对象

  • 所述阵列引用传递,则可以通过执行看到这个A[0] = 7; 从另一种方法。

    然而,该引用(由外部变量A )是按值传递给该函数的。 该引用被复制并创建一个新变量并传递给该函数。 函数外部的变量不受函数内部参数变量A的重新分配的影响。

    要更新原始变量,需要使用ref关键字,以便函数内部的参数表示与函数外部相同的对象。

    int[] A = new int[] {1, 2, 3};
    fun2(A);
    // A at this point says 7, 2, 3.
    fun(ref A);
    // A at this point says 4, 5, 6.
    
    void fun2(int[] a)
    {
       a[0] = 7;
    }
    
    void fun(ref int[] a)
    {
       int[] B = new int[] {4, 5, 6};
       a = B;
    }
    

    我认为所有数组都通过引用在C#中传递

    实际上( 原始数组对象的引用是通过值传递的 ),这是C#中引用类型的常见行为。

    你的理解是部分正确的,引用被传递,但是通过值传递,这意味着创建了一个指向原始数组对象A的新引用。

    fun(int[] A)有它自己的引用副本,它指向包含1,2,3的数组对象,并在fun创建一个新的数组对象B并且您只是将新对象的引用赋值给你当地的方法引用变量当然不会对作为输入传递给fun的原始A对象产生任何影响。

    如果您想反映对A fun的更改以反映回原始数组对象,则需要通过引用传递它。

    您可以更新数组项目而无需通过引用,这在Scott Chamberlain的答案中有很好的解释

    希望能帮助到你!

    链接地址: http://www.djcxy.com/p/21013.html

    上一篇: C# array parameter reference

    下一篇: Why string value remains unchanged after calling function