패스

2017-11-08 3 views
0

I 다음 생성하고 Dictionary<int, List<string>>패스

private static readonly Random rnd = new Random(); 

private static Dictionary<int, List<string>> GenerateValues(string entityType, int rows) 
{ 
    var values = new Dictionary<int, List<string>>(); 

    var baseValues = new List<string> { "99 Hellesdon Road","Home","Norfolk","NR6 5EG","Norwich" }; 

    Action<int> rowLoop = null; 

    switch (entityType) 
    { 
     case "Employer": 
      rowLoop = (row) => 
      { 
       var employer = new List<string> 
       { 
        $"Employer {rnd.Next(10000, 99999)}", 
        $"{rnd.Next(100000000, 999999999)}", 
        "TRUE" 
       }; 

       var rowValue = baseValues; 
       rowValue.AddRange(employer); 
       values.Add(row, rowValue); 
      }; 
      break; 
     case "AssessmentCentre": 
      rowLoop = (row) => 
      { 
       var rowValue = baseValues; 
       rowValue.Add($"Assessment Centre {rnd.Next(10000, 99999)}"); 
       values.Add(row, rowValue); 
      }; 
      break; 
    } 

    for (int i = 1; i <= rows; i++) 
    { 
     rowLoop(i); 
    } 

    return values; 
} 

를 반환하고 다음 코드에 대한 의도 그리고 ... 함께

var spreadsheetValues = GenerateValues("Employer", 5); 

를 호출해야 코드는 일부 기본 값을 List<string>에 저장 한 다음 메서드에 전달되는 값에 따라 entityType에 따라 일부 기본 값에 추가 값을 추가합니다. 그런 다음 Dictionary<int, List<string>>을 만들려면 특정 수의 행을 반복합니다. 여기서 int은 행 번호입니다.

문제는 내가 for 루프를 반복 할 때마다 baseValues이 업데이트되고 있다는 것입니다. var rowValue = baseValues;

이 컬렉션의 마지막 항목의 디버그 스크린 샷입니다 사용할 때, 나는 여덟 개 항목을 포함하는 Dictionary<int, List<string>>의 각 List<string>을 기대하고

enter image description here

....이 기대하지 않았다 대신 각 반복마다 커지고 있습니다.

왜 이런 현상이 발생하며 어떻게 해결할 수 있습니까?

+0

을 대신 다시'같은 baseValue'를 재사용하고 다시이 반복 될 때마다 더 많은 항목을 추가하는 - 당신은 employer.InsertRange'과 같은 작업을 수행 할 수 있습니다 (0, baseValues) ; values.Add (행, 고용주);' – Evk

답변

3

이미 문제 해결 방법을 알고있는 것처럼 보이지만 해결 방법이 있습니다. 당신은 정말 그냥 "rowValue"포인터에 "baseValues"하고 있습니다

var rowValue = baseValues; 

쓰기

. 사본을 만들려면, 당신은 이런 식으로 뭔가를 할 수 :

var rowValue = baseValues.ToList();