C# List<List<object[]>>() 问题 - 奇怪的行为
C# List<List<object[]>>() issue - Weird behavior
我一直在尝试执行以下操作:
public List<List<object[]>> Queue = new List<List<object[]>>();
Queue = InitList(MaxLayerCapability, new List<object[]>());
有
public List<T> InitList<T>(int count, T initValue)
{
return Enumerable.Repeat(initValue, count).ToList();
}
问题出在这里:
Queue[2].Add(new object[] { "Draw", "Test" });
for ( int i = 0; i < MaxLayerCapability; i++)
{
Console.WriteLine(i + ">" + Queue[i].Count);
//Operate(Queue[i], i);
}
出于某种原因,我希望 Queue[2] 包含元素,而所有其他列表(例如,Queue[0])的计数应该为 0。
它在某个时候将所有元素推入队列,有什么想法吗?
这是我得到的:
0>1
1>1
2>1
3>1
4>1
5>1
提前致谢。
问题是,据我了解,Repeat 只是重复引用相同的 List 实例。
我会这样重构它:
public IEnumerable<T> InitList<T>(int count)
{
for (int i=0;i<count; i++)
{
yield return Activator.CreateInstance<T>();
}
}
如果我这样使用函数,我会看到正确的结果:
Queue = InitList<List<object[]>>(3).ToList();
我一直在尝试执行以下操作:
public List<List<object[]>> Queue = new List<List<object[]>>();
Queue = InitList(MaxLayerCapability, new List<object[]>());
有
public List<T> InitList<T>(int count, T initValue)
{
return Enumerable.Repeat(initValue, count).ToList();
}
问题出在这里:
Queue[2].Add(new object[] { "Draw", "Test" });
for ( int i = 0; i < MaxLayerCapability; i++)
{
Console.WriteLine(i + ">" + Queue[i].Count);
//Operate(Queue[i], i);
}
出于某种原因,我希望 Queue[2] 包含元素,而所有其他列表(例如,Queue[0])的计数应该为 0。
它在某个时候将所有元素推入队列,有什么想法吗?
这是我得到的:
0>1
1>1
2>1
3>1
4>1
5>1
提前致谢。
问题是,据我了解,Repeat 只是重复引用相同的 List 实例。 我会这样重构它:
public IEnumerable<T> InitList<T>(int count)
{
for (int i=0;i<count; i++)
{
yield return Activator.CreateInstance<T>();
}
}
如果我这样使用函数,我会看到正确的结果:
Queue = InitList<List<object[]>>(3).ToList();