每次运行此代码时,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 :(得分: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)
}));
答案 1 :(得分: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)
});
}