【发布时间】:2018-02-02 10:20:16
【问题描述】:
我想建立一个引用另一个列表元素的子列表(我需要的很少,满足条件)。
我是怎么做到的:
List<int> mainList = new List<int>();
List<int> subList = new List<int>();
mainList.Add(5);
subList.Add(mainList[0]); //case 1
//subList[0] = mainList[0]; //case 2
Console.WriteLine("{0}", mainList[0]);
Console.WriteLine("{0}", subList[0]);
subList[0]++;
Console.WriteLine("{0}", mainList[0]);
Console.WriteLine("{0}", subList[0]);
mainList[0]+=2;
Console.WriteLine("{0}", mainList[0]);
Console.WriteLine("{0}", subList[0]);
在第一种情况下,我得到的是副本而不是参考,因为控制台输出是:
5
5
5
6
7
6
在第二种情况下,我得到 ArgumentOutOfRangeException,因为 subList[0] 未初始化。
那么,我该怎么做呢?
另外,根据速度/内存使用情况,保留 mainList 的 inedexes 的 List<int> 而不是引用可能会更好?
【问题讨论】:
-
你为什么担心不能正常工作的代码的性能?
-
@AluanHaddad 因为在我的情况下可能没有正确的解决方案,所以我也要检查哪个更好。
-
如果您将 int 包装在一个类中,这将起作用。目前您正在第 4 行复制您的 int
-
好吧,我强烈建议你不要优化任何东西,直到你让它正常运行。这样做会导致疯狂。
-
@AluanHaddad,请不要太在意问题的最后一段,这不是主要问题,只是一个额外的想法。