我在一个方法中有一个char数组,someObject是通过引用传递给GetChars方法的任意对象:
setTimeout()
为什么Array.Reverse在另一种方法中如果不通过引用传递它来更改原始传递的char数组呢?
答案 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;
}