2016-12-03 1 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

문제는 내가 이해할 수있는 것처럼 반복은 List의 동일한 인스턴스에 대한 참조를 반복합니다.

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

귀하의 솔루션이 근무하고있다 : 내가 fucntion이 방법을 사용하는 경우

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

내가 올바른 결과를 참조하십시오 나는 이런 식으로 리팩토링 것입니다! 고맙습니다. – John