[英]C# List of references to another list elements
我想用對注釋器列表元素的引用來構建子列表(我只需要少數幾個滿足條件的元素)。
我如何嘗試做到這一點:
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的inedexe的List<int>
而不是引用?
感謝@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:當list不包含任何元素時,由於在子列表中沒有分配給列表項的內存,因此無法在list中分配值。
您正在獲取System.ArgumentOutOfRangeException,因為您的列表索引小於0或索引等於或大於列表計數
當列表中有項目時,可以通過索引分配值
希望對您有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.