使用List.Add()方法将我的代码从foreach循环中分离出来

gfp*_*ste 0 c# foreach list linq-to-xml

因此,从本质上讲,我运行到哪里,到了"的号召时,一个有趣的问题CreateXML()是由下面的代码"功能,旨在创建一个的XElement,但后来,当我尝试将其添加到xeleents集合,而不是继续调用" CreateXML()"发起的foreach循环,foreach循环被打破,并且调用" WriteXML()".此外,虽然创建并填充了XElement,但它不会添加到List中.[澄清一下,我所指的foreach循环以" ParseDoc()"方法生活]

    private List<XElement> _xelemlist;
    private void WriteXml()
    {
        XElement head = new XElement("header", new XAttribute("headerattributename", "attribute"));
        foreach (XElement xelem in _xelemlist)
        {
            head.Add(xelem);
        }
        XDocument doc = new XDocument();
        doc.Add(head);

    }
    private void CreateXML(string attname, string att)
    {
        XElement xelem = new XElement("name", new XElement("child", new XAttribute(attname, att), segment));
        _xelemlist.Add(xelem);
    }
    private void ExtractSegment(HtmlNode node)
    {
        HtmlAttribute[] segatts = node.Attributes.ToArray();
        string attname = segatts[0].Value.ToString();
        string att = node.InnerText.ToString();
        CreateXML(attname, att);
    }
    private HtmlDocument ParseDoc(HtmlDocument document)
    {
        try
        {
            HtmlNode root = document.DocumentNode.FirstChild;
            foreach (HtmlNode childnode1 in root.SelectNodes(".//child1"))
            {
                foreach (HtmlNode childnode2 in node.SelectNodes(".//child2"))
                {
                    ExtractSegment(childnode2);
                }
            }
        }
        catch (Exception e) { }
        WriteXml();
        return document;
    }
Run Code Online (Sandbox Code Playgroud)

当我在" List.Add()"中注释掉" CreateXML()"并逐步执行代码时,foreach循环在第一次迭代后不会被破坏,并且代码正常工作.

我不知道我做错了什么(是的,代码是由公共成员实例化的,不要担心:我只是将相关的内部方法发布到我的问题上)...如果有人遇到过这种情况以前的行为,我真的很感激推动正确的方向尝试纠正它... Sepcifically:问题只是编码不好,或者这种行为是我正在使用的方法/库之一的属性的结果?

有一点需要注意:我知道,我使用HTMLAgilityPack解析文件和提取信息,但在这个代码的要求迫使我使用的XDocument写入上述信息......不要问我为什么.

Jon*_*eet 5

我不知道我做错了什么

对于初学者来说:

catch (Exception e) { }
Run Code Online (Sandbox Code Playgroud)

这让你无法看到正在发生的事情.我强烈怀疑你NullReferenceException因为_xelemlist无效而得到了,但这是次要问题.主要的问题是通过假装一切都很好,无论发生什么,没有任何记录,获得任何地方的唯一方法是通过调试,这是一个非常糟糕的体验,当你不需要通过它.

这是极为罕见的好主意捕获异常,没有任何记录吞下他们.这样做几乎绝不是一个好主意Exception.

每当您遇到难以诊断的问题时,请首先提高诊断能力.这样,当您下次遇到问题时,诊断起来会更容易.