[英]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.