C#“获取”无法正常工作

时间:2013-12-08 20:24:23

标签: c# arrays swap

我正在尝试进行交换操作。但是当我尝试交换时,它会改变温度和原始数组。代码在这里。

    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数组。但改变了当前的数字。我不希望交换原始数组。我该怎么办?有什么想法吗?

3 个答案:

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