我在一种方法中具有一个char数组,某些对象是通过参考getchars方法传递的任意对象:
private void DoSomeStuff(ref Object someObject)
{
char[] chars = GetChars(ref someObject); // {'a','b','c','d'}
char[] ReversedChars = Reverse(chars); // {'d','d','b','a'}
//chars and ReversedChars are in the same order, although "ref" is not used
}
private char[] Reverse(char[] someChars)
{
Array.Reverse(someChars);
return someChars;
}
为什么在另一种方法中,array。逆转如果不通过引用传递的原始传递的char数组?
数组是对象,所以:参考类型。
它正在传递参考 - 按值。因此:如果将引用指向的内容(即数组数据(,则该更改仍然对每个人都可以看到,他们也对同一对象进行引用。/p> 这里只有一个数组;实际上,没有其他数据可以更改。 通过参考参考文献仅在您将参考
数组是参考类型(根据.NET是一种对象(。当您调用例程时,您将返回相同的参考,并且仅更改其中元素的顺序。
如果您希望它不影响原始结果,请在反转结果之前复制阵列。
作为数组是一种引用类型,如果您不想影响原始值,则需要制作数组的副本。
要这样做,将您的反向方法更新到以下方式:
private char[] Reverse(char[] someChars)
{
char[] cloneArray = someChars.Clone() as char[];
Array.Reverse(cloneArray);
return cloneArray;
}