概念不清

Sri*_*rma 1 c# debugging logic

public static List<int> dynamicArray(int n, List<List<int>> qu)
        {
            List<int> ls1 = new List<int>();
            int lastAnswer = 0;
            foreach (List<int> ls in qu)
            {
                int index = (ls[1] ^ lastAnswer) % n;

                if (ls[0] == 1)
                {
                    List<int> s1111 = qu[index];

                    s1111.Add(ls[2]);
                }
                else
                {
                    List<int> s1111 = qu[index];

                    int ind = ls[2] % s1111.Count;
                    lastAnswer = s1111[ind];
                    ls1.Add(lastAnswer);

                }
            }
            return ls1;
        }
Run Code Online (Sandbox Code Playgroud)

在调试时,我发现 qu 列表值正在改变,我很困惑为什么会发生这种情况,因为我没有在任何地方改变 qu 的值。

如果问题很愚蠢,请提前抱歉,但我仍然需要清除我的疑问。

rfm*_*tor 5

当你这样做时:

List<int> s1111 = qu[index];
Run Code Online (Sandbox Code Playgroud)

...您没有获得 的副本(或克隆)qu[index],而是获得了对它的引用。

所以这:

s1111.Add(ls[2]);

...就像你这样做一样:

qu[index].Add(ls[2]);

如果您想对克隆进行操作并qu保持原样,您可以这样做:

List<int> s1111 = qu[index].ToList();
Run Code Online (Sandbox Code Playgroud)

或这个:

List<int> s1111 = new List<int>(qu[index]);
Run Code Online (Sandbox Code Playgroud)

...但要了解,对于 a List<T>of values 类型(例如int),这两种方法都可以正常工作。如果您正在使用引用类型元素,那么对元素属性的更改s1111将反映在元素中,qu[index]因为同样,每个元素只是对原始元素的引用。只是在您前进时要记住的事情。