C#:Method正在改变我不想要它的原始数组

时间:2016-04-08 05:40:20

标签: c# arrays

我的程序存在问题,我被困在了。基本上processResults采用我的2D数组并以1D数组的形式返回每列的总和,例如{15,13,​​19}。 calculateWiningResult然后重新排列此1D数组以查找数组中的最大结果并返回此最大结果的。在displayWinningResult中,我想使用原始的 unsorted 数组来执行一些计算,但是它似乎从参数中接收排序数组。对不起,我是编程新手,不确定如何解决这个问题。

int[,] theResults = {{4, 7, 4},
                     {5, 1, 7},
                     {6, 5, 8}}

int[] results = processResults(theResults);
int winningResult = calculateWiningResult(results);
displayWinningResult(winningResult, results);

2 个答案:

答案 0 :(得分:2)

C#按值传递引用,因此当您调用calculateWinningResult(results)时,您可能正在排序results,其效果是,猜测是什么,排序results。您认为results正在按值传递,这意味着results的副本会传递到calculateWinningResult并且原始版本不会受到影响。你可能想要:

int[] resultsCopy = new int[results.Length];
Array.Copy(results, resultsCopy, results.Length);
int winningResult = calculateWiningResult(resultsCopy);

答案 1 :(得分:0)

你走了。使用副本或克隆。

 public void myCoolFunction()
 {
    int[,] theResults = new int [rowNum,colNum]{{4, 7, 4},       
               {5, 1, 7},
               {6, 5, 8}};  
     int[,] copyTheResult = (int[,]) theResult.Clone();

     int[] results = processResults(theResults);
        // Similary you can do for all arrays.
 }