一个列表上的AddLast()添加到列表数组中的所有列表C#

一个列表上的AddLast()添加到列表数组中的所有列表C#,c#,arrays,for-loop,linked-list,C#,Arrays,For Loop,Linked List,我基本上有以下代码: LinkedList<int>[] listOfNumbers = new LinkedList<int>[6]; int[] someNumbers = new int[6]; for(int index = 0; index < 6; index++) { listOfNumbers[index] = new LinkedList<int>(); } someNumnbers[0] = 0; someNumnbers[1

我基本上有以下代码:

LinkedList<int>[] listOfNumbers = new LinkedList<int>[6];
int[] someNumbers = new int[6];

for(int index = 0; index < 6; index++)
{
  listOfNumbers[index] = new LinkedList<int>();
}

someNumnbers[0] = 0;
someNumnbers[1] = 1;
someNumnbers[2] = 2;
someNumnbers[3] = 3;
someNumnbers[4] = 4;
someNumnbers[5] = 5;

for(int index = 0; index < 6; index++)
{
  listOfNumbers[index].AddLast(someNumbers[index]);
}
但我好奇地发现:

listOfNumbers[0] has 1 element with value 0
listOfNumbers[1] has 1 element with value 0
listOfNumbers[2] has 1 element with value 0
listOfNumbers[3] has 1 element with value 0
listOfNumbers[4] has 1 element with value 0
listOfNumbers[5] has 1 element with value 0
当我运行最后一个循环直到其完成时,我得到以下结果:

listOfNumbers[0] has 6 element with values 0,1,2,3,4,5
listOfNumbers[1] has 6 element with values 0,1,2,3,4,5
listOfNumbers[2] has 6 element with values 0,1,2,3,4,5
listOfNumbers[3] has 6 element with values 0,1,2,3,4,5
listOfNumbers[4] has 6 element with values 0,1,2,3,4,5
listOfNumbers[5] has 6 element with values 0,1,2,3,4,5
与我期望得到的相比:

listOfNumbers[0] has 1 element with value 0
listOfNumbers[1] has 1 element with value 1
listOfNumbers[2] has 1 element with value 2
listOfNumbers[3] has 1 element with value 3
listOfNumbers[4] has 1 element with value 4
listOfNumbers[5] has 1 element with value 5

我的第一个猜测是我写了一些语法错误的东西,但我似乎不知道是什么。显然,它似乎在每次传递时都将AddLast()应用于列表数组中的每个列表,但我不知道为什么。任何帮助都将不胜感激。

我认为您正在制作一系列LinkedList,而您只想使用LinkedList

尝试将其初始化为单个LinkedList,然后添加元素

查看文档中提供的
LinkedList
类的使用示例:

您应该尝试使用两个
for
循环执行以下操作。外循环用于遍历每个列表,内循环用于填充每个列表

for(int i=0; i<6;i++)
{
for(int index = 0; index < 6; index++)
{
  listOfNumbers[i].AddLast(someNumbers[index]);
}
}

用于(int i=0;i如果在每个索引中都有相同的链表实例,则会发生这种情况,如果您实际初始化linkedlist数组,正如您所示,这应该不会是一个问题。相同的实例意味着您将链表实例化一次为变量,然后在每个数组索引中分配该实例,这将基本上解决我的问题由于它们在内部都是相同的对象,因此无论您在哪个对象中调用addlast方法,它都会反映在数组中的每个项中。

是您为第一个
for
循环显示的代码,该循环初始化数组元素的方式与您运行的代码中显示的完全相同吗?是的,该部分代码是标识的我在程序中唯一稍微偏离的地方是,分配给somenumbers[]元素的数字实际上是由另一个返回整数的方法计算的。虽然我很欣赏这个建议,但这会给我每个包含{0,1,2,3,4,5}的列表,而我在寻找{0},{1},{2},{3},{4},{5)。使用一个LinkedList会很好,但遗憾的是,我确实需要在程序的上下文中使用一个列表数组,因为它们稍后将具有不同的节点值,然后将彼此进行比较。我只是运行了您在问题中提供的部分代码,在循环结束时,我得到了您期望的结果,而不是这听起来确实像是在发生什么。为了澄清我的想法可能是一个关键的澄清,而不违反我的保密协议:整数数组中的值是从我之前实例化的类对象中获得的数据的计算结果。比如,
someNumbers[0]=myClassObject.Calculate_Int();
这可能是幕后造成混乱的原因吗?因为数据来自一个类(一个引用对象),对链接列表的引用发生了一些错误吗?我假设Calculate_Int()正在返回linkedList,如果它返回的是一个整数(顾名思义),那么问题就不存在了,因为整数是值类型,并且上述行为仅限于引用类型。一种简单的方法是查看每个数组的哈希代码,以确定所有数组是否都具有相同的对象(如果它们是整数,则不适用)(someNumbers[0].GetHashCode())在调试时,相同的对象将具有相同的哈希代码,除非有相同的自定义逻辑(LinkedList不是这样)。我刚刚验证了哈希代码是否完全相同,并在几行之前跟踪到了一个逻辑错误。非常感谢您的帮助,我非常感谢。
for(int i=0; i<6;i++)
{
for(int index = 0; index < 6; index++)
{
  listOfNumbers[i].AddLast(someNumbers[index]);
}
}