C# 如何在没有引用的情况下将元素列表添加到列表中?

C# 如何在没有引用的情况下将元素列表添加到列表中?,c#,C#,我找不到答案,因为它似乎太具体了。这就是我对C#的问题。 我们可以像这样将另一个列表作为克隆添加到另一个列表中 list2 = new List<int>(list1); list2=新列表(list1); 我想知道的是,在没有孩子的任何参考的情况下,如何将列表添加到另一个列表中 List<List<List<int>>> wireCoords = new List<List<List<int>>>(); L

我找不到答案,因为它似乎太具体了。这就是我对C#的问题。 我们可以像这样将另一个列表作为克隆添加到另一个列表中

list2 = new List<int>(list1);
list2=新列表(list1);
我想知道的是,在没有孩子的任何参考的情况下,如何将列表添加到另一个列表中

List<List<List<int>>> wireCoords = new List<List<List<int>>>();
List<int> coord = new List<int>();

for(int i = 0; i < inputSplits.Length; i++)
 {
      coord.Add(0);
      coord.Add(0);
      wireCoords[i].Add(coord);

 }
List wireCoords=new List();
列表坐标=新列表();
for(int i=0;i
wireCoords[0][0]列表一旦更改,wireCoords[1][0]内部的列表也会更改
我如何解决这个问题?

有两件事。您不能通过[i]访问器访问列表,除非该列表在该索引处有内容。其次,可以使用List1.AddRange(List2)复制列表的值。在此之后,更改列表2不会更改列表1

在for循环中,项的数量增加到inputSplits.Length*2,表示WiredWord的每个索引。为了解释为什么会发生这种情况,让我们举一个例子

List<int> object1 = new List<int>();
object1.Add(1);
object1.Add(2);

List<int> object2 = object1;

object1.Add(3);
// at this time, object2 also has an element 3.

Console.WriteLine(string.Join(",", object2));

output:
1,2,3 (instead of 1,2 that you'd normally expect)
List object1=新列表();
反对意见1.添加(1);
反对1.加入(2);
List object2=object1;
反对1.加入(3);
//此时,object2还有一个元素3。
Console.WriteLine(string.Join(“,”,object2));
输出:
1,2,3(而不是你通常期望的1,2)
object1从未被分配object2的“值”。object1将获得object2的“引用”,当您更改object1的值时,object2将自动得到更新

解决这个问题的办法可能是

List<int> object2 = object1;
object1 = new List<int>(); // re-initialized
object1.Add(3);

// object1 has only 1 element
// object2 has 2 elements.
List object2=object1;
object1=新列表();//重新初始化
反对1.加入(3);
//object1只有1个元素
//object2有2个元素。
要解决此问题,请创建一个新对象或重新初始化该对象以获取新引用,然后将其用于以后的指定

您的代码:

List<List<List<int>>> wireCoords = new List<List<List<int>>>();
List<int> coord ;

for(int i = 0; i < inputSplits.Length; i++)
 {
      coord = new List<int>();
      coord.Add(0);
      coord.Add(0);
      wireCoords.Add(coord);

 }

List wireCoords=new List();
名单协调;
for(int i=0;i

希望有帮助。

两件事。您不能通过[i]访问器访问列表,除非该列表在该索引处有内容。其次,可以使用List1.AddRange(List2)复制列表的值。在此之后,更改列表2不会更改列表1

在for循环中,项的数量增加到inputSplits.Length*2,表示WiredWord的每个索引。为了解释为什么会发生这种情况,让我们举一个例子

List<int> object1 = new List<int>();
object1.Add(1);
object1.Add(2);

List<int> object2 = object1;

object1.Add(3);
// at this time, object2 also has an element 3.

Console.WriteLine(string.Join(",", object2));

output:
1,2,3 (instead of 1,2 that you'd normally expect)
List object1=新列表();
反对意见1.添加(1);
反对1.加入(2);
List object2=object1;
反对1.加入(3);
//此时,object2还有一个元素3。
Console.WriteLine(string.Join(“,”,object2));
输出:
1,2,3(而不是你通常期望的1,2)
object1从未被分配object2的“值”。object1将获得object2的“引用”,当您更改object1的值时,object2将自动得到更新

解决这个问题的办法可能是

List<int> object2 = object1;
object1 = new List<int>(); // re-initialized
object1.Add(3);

// object1 has only 1 element
// object2 has 2 elements.
List object2=object1;
object1=新列表();//重新初始化
反对1.加入(3);
//object1只有1个元素
//object2有2个元素。
要解决此问题,请创建一个新对象或重新初始化该对象以获取新引用,然后将其用于以后的指定

您的代码:

List<List<List<int>>> wireCoords = new List<List<List<int>>>();
List<int> coord ;

for(int i = 0; i < inputSplits.Length; i++)
 {
      coord = new List<int>();
      coord.Add(0);
      coord.Add(0);
      wireCoords.Add(coord);

 }

List wireCoords=new List();
名单协调;
for(int i=0;i

希望能有所帮助。

除了@Jawad对该问题的详细解释之外,以下是如何以更简洁、更实用的方式使用LINQ:

List<List<List<int>>> wireCoords = inputSplits
   .Select(_=> new List<int>(){0,0})
   .Select(coords=> new List<List<int>>(){coords})
   .ToList();
列出wireCoords=inputSplits
.Select(=>newlist(){0,0})
.Select(coords=>newlist(){coords})
.ToList();

除了@Jawad对该问题的详细解释之外,以下是您如何使用LINQ以更简洁、更实用的方式实现这一点:

List<List<List<int>>> wireCoords = inputSplits
   .Select(_=> new List<int>(){0,0})
   .Select(coords=> new List<List<int>>(){coords})
   .ToList();
列出wireCoords=inputSplits
.Select(=>newlist(){0,0})
.Select(coords=>newlist(){coords})
.ToList();

您应该执行
coord=newlist()内部for循环。您应该执行
coord=newlist()内部for循环。