我正在尝试进行交换操作。但是当我尝试交换时,它会改变温度和原始数组。代码在这里。
private int[] currentNumbers;
currentNumbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
public int[] getNumbers()
{
return currentNumbers;
}
int[] temp;
int[] ux = numbers.getNumbers();
int i=1, j=2;
temp = swap(i, j, ux);
public int[] swap(int i,int j,int[] u) {
int t = u[i];
u[i] = u[j];
u[j] = t;
return u;
}
该代码块按计划更改了ux数组。但改变了当前的数字。我不希望交换原始数组。我该怎么办?有什么想法吗?
答案 0 :(得分:2)
扩展SLaks所说的,你的.getNumbers()函数没有返回数组的副本,而是直接向currentNumbers返回一个引用。如果要每次都返回一个新副本而不是修改currentNumbers,则应使用Array.Copy。
int[] ux;
Array.Copy(numbers.getNumbers(), ux, numbers.getNumbers.Length)
可能有更多最佳方法可以做到这一点,但这样可以得到你想要的东西!
答案 1 :(得分:1)
您应该在getNumbers方法中使用clone方法。 http://msdn.microsoft.com/en-us/library/system.array.clone%28v=vs.110%29.aspx
答案 2 :(得分:1)
您的问题是c#中的数组是通过引用传递的,因此您需要将该数组复制到另一个数组中,对该数组应用更改,然后将其返回。
查看此答案以获取更多详细信息Passing Arrays by Value and by Reference