我想这是一个相当愚蠢的问题。 我想通过值传递一个数组参数,而不是通过链接,即我想制作一个对象的副本,以防止更改方法内的参数。 提前谢谢。
答案 0 :(得分:8)
如果你的方法破坏性地对其参数的内容起作用,只需在方法中复制一个数组。
这就像
一样简单var copy = parameter.ToArray();
如果您使用的是LINQ,否则也可以使用Array.Copy
轻松完成。
这比在调用方法之前复制要好得多(正如你在问题中提到的那样),因为你总是会忘记这样做。复制内部方法不会出错。
答案 1 :(得分:3)
数组是引用类型。传递给方法时,不能自动克隆它们。
您必须手动制作克隆并将结果数组传递给方法:
int[] array = ...
MyMethod((int[])array.Clone());
请注意,这是一个 O(n)操作对于大型数组或多次重复调用来说可能非常慢。
答案 2 :(得分:1)
在C#中无法做到这一点。您需要自己复制数组,无论是在方法内还是在调用端:
int[] array = GetIntArray();
CallSomeMethod(array.ToArray()); // ToArray() makes a copy of the input...
答案 3 :(得分:1)
我对OP中问题的理解是海报正在寻找一种按值传递引用类型的方法。我找到了这个例子:
class PassingRefByVal
{
static void Change(int[] arr)
{
//arr[0]=888; // This change affects the original element.
arr = new int[5] {-3, -1, -2, -3, -4}; // This change is local.
Console.WriteLine("Inside the method, the first element is: {0}", arr[0]);
}
public static void Main()
{
int[] myArray = {1,4,5};
Console.WriteLine("Inside Main, before calling the method, the first element is: {0}", myArray [0]);
Change(myArray);
Console.WriteLine("Inside Main, after calling the method, the first element is: {0}", myArray [0]);
Console.ReadLine();
}
}
此处:http://msdn.microsoft.com/en-us/library/0f66670z(v=vs.71).aspx
希望这是你正在寻找的。 p>