继续将相同变量的新值添加到列表中

时间:2018-06-29 12:32:23

标签: c# list variable-assignment

因此似乎找不到解决我问题的任何解决方案: 我得到一个字符串(让我们说abcd),我需要每次旋转一次字符并将其存储到word_length的列表(或数组)中!很多次(!表示阶乘)。到目前为止,我的工作正常,并且可以完成我想要的工作(如果我在将每个值添加到列表中之前和之后打印出每个值,则可以正常打印),除非仅在最后打印出列表中的所有值,由于某些原因,我不知道为什么,列表中的所有值都与最后分配的值相同。我尝试了很多不同的方法,包括每次将其分配给新变量,添加到数组而不是列表等。我很确定这与内存地址或某些东西有关。谁能帮忙。这是我的代码:

static void Main(string[] args)
{     
    string word = "abcd";
    int word_length = word.Length;
    char[] word_arr = word.ToCharArray();
    List<char[]> list = new List<char[]>();
    list.Add(word_arr);
    while (list.Count < Factorial(word_length))
    {
        word_arr = RotateLetters(word_arr);
        list.Add(new_array);
    }
    list.ForEach(Console.WriteLine);
}


public static int Factorial(int n)
{
    int result = 1;
    while (n > 0)
        result *= (n--);
    return (result);
}

private static char[] RotateLetters(char[] word_arr)
{
    int i = 0, l = word_arr.Length - 1;
    char tmp = word_arr[0];
    while (i < l)
    {
        word_arr[i] = word_arr[i + 1];
        i++;
    }
    word_arr[l] = tmp;
    return (word_arr);
}

public static void Swap(ref char a, ref char b)
{
    if (a == b)
        return;
    char tmp = a;
    a = b;
    b = a;
}

1 个答案:

答案 0 :(得分:2)

您正在将对同一数组的引用添加到列表中。列表中的每个条目都引用内存中的同一数组,因此当您修改数组时,它们会更改显示在每个列表项中。您需要添加一个副本。试试:

list.Add((char[])word_array.Clone());