C# - 在字符串列表列表中重复而不是正确的值

标签 c# .net xml

我使用 foreach(如下所示)从 xml 文件中读取并将找到的信息写入列表,然后将其添加到列表列表中。我的问题是,当 foreach 循环试图将另一个元素添加到我的列表列表时,它以某种方式删除了列表中先前元素的内容,而是添加了相同的 x。例如。第一个循环没问题,在第二个循环中它删除第一个元素并添加 2 个相同的元素,在第三个循环中它添加 3 个相同的列表等。 这可能是一个简单的问题,但我目前真的想不出解决方案。

代码:

static List<List<string>> AddPapers(XmlNodeList nodelist)
    {
        var papers = new List<List<string>>();
        var paper = new List<string>();

        foreach (XmlNode node in nodelist)
        {
            paper.Clear();
            for (int i = 0; i < node.ChildNodes.Count; i++)
            {
                    paper.Add(node.ChildNodes[i].InnerText);
            }
            papers.Add(paper);
        }
        return papers;
    }

更多信息:这是一种简化版本,没有 id 对 xml 做的所有花哨的东西,但问题是一样的。 每次我检查时,paper 列表都很好,所以问题应该出在添加到paper 上。老实说,我不知道它为什么甚至如何删除论文的内容并自己添加相同的值。

最佳答案

问题是你只调用了 paper.Clear ,它会清除您刚刚添加的列表,但随后您会用新项目重新填充它并再次添加它。

相反,您应该在每次迭代时创建一个列表的新实例,这样您就不会总是一遍又一遍地修改同一个列表(记住 List<T> 是一个引用类型,所以你只是在 list 中添加了一个引用

例如:

static List<List<string>> AddPapers(XmlNodeList nodelist)
{
    var papers = new List<List<string>>();        

    foreach (XmlNode node in nodelist)
    {
        // Create a new list on each iteration
        var paper = new List<string>();

        for (int i = 0; i < node.ChildNodes.Count; i++)
        {
            paper.Add(node.ChildNodes[i].InnerText);
        }

        papers.Add(paper);
    }

    return papers;
}

另外,使用 System.Linq扩展方法,您的代码可以简化为:

static List<List<string>> GetChildrenInnerTexts(XmlNodeList nodes)
{
    return nodes.Cast<XmlNode>()
        .Select(node => node.ChildNodes.Cast<XmlNode>()
            .Select(child => child.InnerText)
            .ToList())
        .ToList();
}

关于C# - 在字符串列表列表中重复而不是正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59313299/

相关文章:

c# - 在运行时动态调用 Web 服务

c# - 更新语句不更新我的数据

javascript - 在 html 页面之间移动

c# - Asp.Net Core Web 应用程序静态文件在 Linux 上给出 404

c# - 所有枚举项到字符串 (C#)

java - 使用 DOM 解析器解析 XML 字符串返回 null

xml - Golang Xml Unmarshal,没有值(value)

c# - Web 方法和数据库连接

c# - C# 中的受约束泛型委托(delegate)

android - 将 xml (android 源代码) 转换为 pdf