数组正在影响其他数组值C#

时间:2014-03-20 16:47:02

标签: c# arrays sorting windows-8

static int[] scores = new int[100];
static int[] scorescopy;
public static int orderscores()
{
   scorescopy = scores;
    Array.Sort(scorescopy);
    int sortingtoolb = 0;
    return 0;
}

我正在尝试获取我的初始数组的副本,然后尝试对该副本进行排序。但是,当我使用Array.Sort()函数时,我的第一个数组也会继续排序,但我想保留它。我试图在scorecopy上取消新的声明,但这并没有影响结果。

另外,有没有办法将数组中未使用的变量保持为null? (如果我没有使用它的所有部分,我在数组的开头会得到一堆0)。

我在运行Windows 8.1 Pro的系统上使用Visual Studio Express 2012 for Windows 8。

3 个答案:

答案 0 :(得分:6)

数组在分配时仅复制对内存中同一数组的引用。您需要实际复制此值才能起作用:

public static int orderscores()
{
    scorescopy = scores.ToArray(); // Using LINQ to "cheat" and make the copy simple
    Array.Sort(scorescopy);
    int sortingtoolb = 0;
    return 0;
}

请注意,您可以通过以下方式执行此操作:

scorescopy = new int[scores.Length];
Array.Copy(scores, scorescopy, scores.Length);
//... rest of your code

答案 1 :(得分:3)

表达式scorescopy = scores;复制数组的句柄。

如果要创建数组项的副本,则应将该行更改为:
scores.copyTo(scorescopy,0);

您仍然需要确保scorecopy有足够的空间存放物品 所以你还需要这个表达式:static int[] scorescopy = new int[scores.Length];

现在你的代码应该是这样的:

static int[] scores = new int[100];
static int[] scorescopy = new int[scores.Length];

public static int orderscores()
{
    scores.copyTo(scorescopy,0);
    Array.Sort(scorescopy);
    int sortingtoolb = 0;
    return 0;
}

答案 2 :(得分:2)

你得到一个指向同一个数组的指针,你想要一个克隆:

scorescopy = (int [])scores.Clone();