将数组传递给C#中的方法

时间:2011-01-10 20:42:40

标签: c#

我想这是一个相当愚蠢的问题。 我想通过值传递一个数组参数,而不是通过链接,即我想制作一个对象的副本,以防止更改方法内的参数。 提前谢谢。

4 个答案:

答案 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

希望这是你正在寻找的。