2014-12-05 2 views
0

이 코드를 실행할 때마다 certlist는 첫 번째 값 집합을 읽고 성공적으로 목록에 씁니다. 루프를 다시 실행할 때 다음 값 집합이 첫 번째 값을 덮어 쓰고 두 번째 값을 만듭니다. 최종 결과는 목록 내에서 두 개의 동일한 값입니다.목록이 올바르게 채워지지 않음

첫 번째 값을 덮어 쓰는 이유와 해결 방법에 대한 도움이 될 것입니다.

 foreach (var certcard in xdoc.Root.Element("Diver").Element("Certifications").Elements("Certification_Card")) 
     { 
      cert.Level = certcard.Element("Level").Value; 
      cert.Agency = certcard.Element("Agency").Value; 
      cert.Number = certcard.Element("Number").Value; 
      cert.Date = Convert.ToDateTime(certcard.Element("Date").Value); 

      certlist.Add(cert); 
     } 
+0

'cert'를 루프 안에 선언하십시오. –

답변

0

이 시도 :

foreach (var certcard in xdoc.Root.Element("Diver").Element("Certifications") 
     .Elements("Certification_Card")) 
    { 
     certlist.Add(new Cert() 
     { 
      Level = certcard.Element("Level").Value, 
      Agency = certcard.Element("Agency").Value, 
      Number = certcard.Element("Number").Value, 
      Date = Convert.ToDateTime(certcard.Element("Date").Value) 
     }); 
    } 
+0

완벽하게 일했습니다. 감사! –

+0

오신 것을 환영합니다 .. @MattL –

1

원래 코드는 인증서의 선언 실종됐다 : 마찬가지로

foreach (var certcard in xdoc.Root.Element("Diver").Element("Certifications") 
     .Elements("Certification_Card")) 
    { 
     var cert = new Cert(); 
     cert.Level = certcard.Element("Level").Value; 
     cert.Agency = certcard.Element("Agency").Value; 
     cert.Number = certcard.Element("Number").Value; 
     cert.Date = Convert.ToDateTime(certcard.Element("Date").Value); 

     certlist.Add(cert); 
    } 

을, 당신이 Linq를 사용하여 루프없이이 작업을 수행 할 수 있습니다 :

certlist.AddRange(xdoc.Root.Element("Diver") 
    .Element("Certifications") 
    .Elements("Certification_Card") 
    .Select(c => new Cert 
    { 
     Level = c.Element("Level").Value, 
     Agency = c.Element("Agency").Value, 
     Number = c.Element("Number").Value, 
     Date = Convert.ToDateTime(c.Element("Date").Value) 
    }));