2016-12-03 6 views
3

Я пытался сделать следующее:C List # <Список <object[]>>() проблема - Weird поведение

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

Проблема заключается в том, что, как я понимаю, Repeat просто повторяет ссылку на тот же экземпляр List. я бы реорганизовать это так:

public IEnumerable<T> InitList<T>(int count) 
{ 
    for (int i=0;i<count; i++) 
    { 
    yield return Activator.CreateInstance<T>(); 
    }    
} 

я вижу правильные результаты, если я использую fucntion таким образом:

Queue = InitList<List<object[]>>(3).ToList(); 
+0

Ваше решение работал! Большое спасибо. – John

 Смежные вопросы

  • Нет связанных вопросов^_^