2016-12-03 22 views
3

我一直在努力做到以下幾點:C#列表<列表<object[]>>()問題 - 怪異的行爲

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 

感謝。

回答

2

問題是,據我瞭解,重複只是重複引用列表的同一個實例。 我會重構它是這樣的:

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(); 
+0

您的解決方案已經成功了!非常感謝你。 – John