【发布时间】:2019-05-10 15:20:30
【问题描述】:
我在一个方法中有一个 char 数组,someObject 是通过引用传递给 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.Reverse在另一种方法中会更改原始传递的char数组?
【问题讨论】:
-
为什么您的引用类型参数标记为
ref,而您却从未分配给它们?你了解ref的含义以及引用类型是什么吗? -
因为它是我使用的临时对象,但即使我们想象 someObject 参数不存在,结果也可能是一样的。
-
该方法反转其设计以修改作为参考传递给它的数组 (docs.microsoft.com/en-us/dotnet/api/…)。如果你希望确保原始不受影响,那么克隆数组,反转克隆的数组,并返回这样的克隆。
-
试试
char[] clone = (char[]) Array.Clone(someChars);。然后是Array.Reverse(clone);,最后是return clone;
标签: c# arrays array-reverse