首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >概念不清

概念不清
EN

Stack Overflow用户
提问于 2020-03-14 22:52:19
回答 1查看 48关注 0票数 1
代码语言:javascript
复制
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;
        }

在调试过程中,我发现qu列表值正在发生变化,我很困惑为什么会发生这种情况,因为没有什么地方可以更改qu的值。

如果这个问题是愚蠢的,请提前道歉,但我仍然需要澄清我的疑虑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-14 23:15:34

当你这样做时:

代码语言:javascript
复制
List<int> s1111 = qu[index];

.你得到的不是qu[index]的拷贝(或克隆),而是它的引用。

所以这个:

s1111.Add(ls[2]);

...is与您所做的相同:

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

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

代码语言:javascript
复制
List<int> s1111 = qu[index].ToList();

或者这个:

代码语言:javascript
复制
List<int> s1111 = new List<int>(qu[index]);

...but理解,这两种方法对于值类型的List<T> (例如int)来说都会像预期的那样工作。如果您使用的是引用类型元素,那么s1111中元素属性的更改将反映在qu[index]元素中,因为同样,每个元素只是对原始元素的引用。当你继续前进的时候,要记住一些事情。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60688067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档