简单的循环和错误的元素

时间:2017-02-26 13:43:34

标签: c# arrays list

这里有一些代码:

foreach (int[] temp in intList)
{
    string str = GenerateGamma(0,1,10,temp);
    if (str == "924890128")
        answer.Add(temp);
}

intList中有int数组,每个数组都有以下属性:array[1] = 1(数组长度为10)。好吧,当我查看answer时,我看到了数组1 4 6 0 9 3 2 7 5 8,所以array[1] = 4。 这是代码GenerateGamma()

public static string GenerateGamma(int i0, int j0, int m, int[] b)
{
    Constants ct = new Constants();
    int[] gamma = new int[9];
    int[] inside_array = b;
    string result = "";
    int temp_i = i0, temp_j = j0, inttemp = 0;
    for (int t = 1; t <= 9; t++)
    {
        temp_i = ((temp_i + 1) % m);
        temp_j = ((temp_j + inside_array[temp_i]) % m);
        inttemp = inside_array[temp_i];
        inside_array[temp_i] = inside_array[temp_j];
        inside_array[temp_j] = inttemp;
        gamma[t-1] = (inside_array[(inside_array[temp_i]+inside_array[temp_j])%m]%m);
    }
    result = string.Join("",gamma);
    return result;
}

1 个答案:

答案 0 :(得分:0)

数组是引用类型,如果更改GenerateGamma()方法中传递的数组,原始数组也将被更改。

您的数组已更改,因为您拥有内部方法:

int[] inside_array = b;

在这里,您不创建传递数组的副本,只需创建对数组的引用副本。因此,您有一个数组和两个引用(binside_array),它们指向同一个数组:b[0] = 1;inside_array[0] = 1;执行相同操作 - 它们修改相同的数组。

如果你想复制:

int[] inside_array = new int[b.Length];
for (int a = 0; a < inside_array.Length; a++)
{
    inside_array[a] = b[a];
}

在此之后,您将拥有两个数组,当您更改一个数组时,另一个数组将不会更改。