2016-08-23 2 views
0

레코드 세트를 반복하면서 필 요한 컬럼을 가져 와서 목록에 값을 추가 한 다음 추가 할 때 발생하는 문제에 대한 해결책을 찾고 있습니다 목록에서 사전 값.레코드 세트를 반복하고 각 행을 사전에 추가하기

이것은 첫 번째 레코드에는 문제가 없지만 다음 8 개의 필드를 목록에 삽입하려고하면이 필드가 이미 추가 된 후 사전에서 기존 목록 값을 삭제합니다.

이 문제를 해결할 방법이 있습니까?

List<string> dbList = new List<string>(); 
Dictionary<int, List<string>> dbDict = new Dictionary<int, List<string>>(); 

do 
{ 
dbList.Add("Field1 : " (String)rs.Fields["Field1"].Value); 
dbList.Add("Field2 : " rs.Fields["Field 2"].Value); 
dbList.Add("Field3 : " (String)rs.Fields["Field3"].Value); 
dbDict.add(i,dbList); 
i+=1; 
rs.MoveNext(); 
dbList.Clear(); 
} 
while (rs.EOF == false); 
+0

dbList는 참조 객체입니다. 그 중 하나만 만들면 같은 것을 추가 (및 삭제)됩니다. 새로운 값을 저장할 새로운리스트를 만드십시오. – Plutonix

+2

'dbList.Clear()'대신'dbList = new List ();'을 시도하십시오 –

답변

0

모든 루프마다 새 목록을 만듭니다. 그것으로 문제가 해결됩니다. 그것은 분명히 호출 참조 유형이기 때문에 귀하의 사전에 하나를 포함하여 그 참조를 취소하게됩니다.

0

대신의 dbList = new List<string>(); 시도 dbList.Clear()

솔루션 :

dbList이 참조 형식이기 때문이다
List<string> dbList; 
Dictionary<int, List<string>> dbDict = new Dictionary<int, List<string>>(); 

do 
{ 
    dbList = new List<string>(); 
    dbList.Add("Field1 : " (String)rs.Fields["Field1"].Value); 
    dbList.Add("Field2 : " rs.Fields["Field 2"].Value); 
    dbList.Add("Field3 : " (String)rs.Fields["Field3"].Value); 
    dbDict.add(i,dbList); 
    i+=1; 
    rs.MoveNext(); 
} 
while (rs.EOF == false); 
+1

왜 사용하기 전에리스트를 두 번 초기화합니까? –

+0

님이 답변을 편집했습니다 –

0

, 당신은 사전에 참조를 전달하고 내부를 지 웁니다 같은 기준에 대한 명확한 전화 목록의 상태.

dbList의 생성 및 사용을 루프 내부로 이동하면 모든 루프 반복마다 새 인스턴스를 만들고 지우기를 호출하지 않습니다.

Dictionary<int, List<string>> dbDict = new Dictionary<int, List<string>>(); 

do 
{ 
    List<string> dbList = new List<string>(); 
    dbList.Add("Field1 : " (String)rs.Fields["Field1"].Value); 
    dbList.Add("Field2 : " rs.Fields["Field 2"].Value); 
    dbList.Add("Field3 : " (String)rs.Fields["Field3"].Value); 
    dbDict.add(i,dbList); 
    i+=1; 
    rs.MoveNext(); 
} 
while (rs.EOF == false); 
관련 문제