【问题标题】:C# List of references to another list elementsC# 对另一个列表元素的引用列表
【发布时间】: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&lt;int&gt; 而不是引用可能会更好?

【问题讨论】:

  • 你为什么担心不能正常工作的代码的性能?
  • @AluanHaddad 因为在我的情况下可能没有正确的解决方案,所以我也要检查哪个更好。
  • 如果您将 int 包装在一个类中,这将起作用。目前您正在第 4 行复制您的 int
  • 好吧,我强烈建议你不要优化任何东西,直到你让它正常运行。这样做会导致疯狂。
  • @AluanHaddad,请不要太在意问题的最后一段,这不是主要问题,只是一个额外的想法。

标签: c# list reference


【解决方案1】:

感谢@ManIkWeet 和@Florian,我找到了解决方案:

        public class TestClass{
           public int value;
        }

        ...

        List<TestClass> mainList = new List<TestClass>();
        List<TestClass> subList = new List<TestClass>();
        mainList.Add(new TestClass { value = 5 });
        subList.Add(mainList[0]);
        Console.WriteLine("{0}", mainList[0].value);
        Console.WriteLine("{0}", subList[0].value);
        subList[0].value++;
        Console.WriteLine("{0}", mainList[0].value);
        Console.WriteLine("{0}", subList[0].value);
        mainList[0].value+=2;
        Console.WriteLine("{0}", mainList[0].value);
        Console.WriteLine("{0}", subList[0].value);

输出是:

5
5
6
6
8
8

【讨论】:

    【解决方案2】:

    案例 2:当列表不包含任何元素时,您无法在列表中分配值,因为子列表中的列表项没有分配内存。

    您收到 System.ArgumentOutOfRangeException 是因为您的列表索引小于 0 或索引等于或大于列表计数

    当列表中有项目时,您可以通过索引分配值

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      • 2021-07-14
      • 2019-10-26
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 1970-01-01
      相关资源
      最近更新 更多