繁体   English   中英

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

[英]Passing array to method in C#

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

如果您的方法对其参数的内容具有破坏性,则只需在方法内部复制数组即可。

这很简单

var copy = parameter.ToArray();

如果您使用LINQ,否则也可以使用Array.Copy轻松Array.Copy

这比调用方法之前的复制要好得多(正如你在问题中提到的那样),因为你总是会忘记这样做。 方法复制不会出错。

数组是引用类型。 传递给方法时,不能自动克隆它们。

您必须手动创建克隆并将结果数组传递给方法:

int[] array = ...

MyMethod((int[])array.Clone());

请注意,对于大型数组或许多重复调用,这是一个O(n)操作可能会非常慢。

在C#中无法做到这一点。 您需要自己复制数组,无论是在方法内还是在调用端:

int[] array = GetIntArray();
CallSomeMethod(array.ToArray()); // ToArray() makes a copy of the input...

我对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

希望这是你正在寻找的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM