列表没有正确填充

时间:2014-12-05 03:41:43

标签: c# linq-to-xml containers

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

2 个答案:

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