C# 列表未正确填充

C# 列表未正确填充,c#,linq-to-xml,containers,C#,Linq To Xml,Containers,每次运行此代码时,certlist都会读入第一组值并将它们成功写入列表。当它再次通过循环时,下一组值将覆盖第一个值并创建第二个值。最终结果是列表中有两个相同的值 任何关于它为什么会覆盖第一个值以及如何修复它的帮助都将非常有用 foreach (var certcard in xdoc.Root.Element("Diver").Element("Certifications").Elements("Certification_Card")) {

每次运行此代码时,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);
        }
试试这个:

    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) 
        });
    }

您的原始代码只缺少证书声明:

    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)
    }));

在循环中声明
cert
。工作正常。谢谢