C#Array.Reverse反转按值传递给方法的原始数组

时间:2019-05-10 15:20:31

标签: c# arrays array-reverse

我在一个方法中有一个char数组,someObject是通过引用传递给GetChars方法的任意对象:

setTimeout()

为什么Array.Reverse在另一种方法中如果不通过引用传递它来更改原始传递的char数组呢?

3 个答案:

答案 0 :(得分:3)

数组是对象,所以:引用类型。

它正在传递参考-按值。因此:如果您更改引用指向的内容(即数组数据),那么对也有相同对象引用的每个人仍然可以看到该更改。 / p>

这里只有一个数组;实际上,没有其他数据可以更改。

仅当您将参考重新分配给其他对象时,才通过参考传递参考才有意义。

答案 1 :(得分:1)

数组是引用类型(根据.NET,它们是一种对象)。当您调用例程时,您将返回相同的引用,并且仅更改其中的元素顺序。

如果不希望阵列影响原始结果,请在反转结果之前复制该阵列。

答案 2 :(得分:1)

由于数组是引用的类型,因此如果不想影响原始值,则需要复制数组。

为此,请将您的Reverse方法更新为此:

private char[] Reverse(char[] someChars)
    {
        char[] cloneArray = someChars.Clone() as char[];
        Array.Reverse(cloneArray);
        return cloneArray;
    }