none
为什么C#程序偶尔出错,变量怪异的变为null RRS feed

  • 问题

  • 写了一个生成HTML的DOM树的C#程序
    当网页比较大的时候,也就是树节点比较多时,不时就会出错。但有时又是正常运行的


    一个递归程序,出错的地方在红色行处,错误时提示为:child_node为null
    按理说child_node是不可能为null的呀
    为什么会产生这种现象,应该怎么避免呢?

    private void InsertDOMNodes(IHTMLDOMNode parentnode, TreeNode tree_node)
            {
                if (parentnode.hasChildNodes())    //是否有子结点
                {
                    IHTMLDOMChildrenCollection allchild = (IHTMLDOMChildrenCollection)parentnode.childNodes;
                    int length = allchild.length;
                    for (int i = 0; i  < length; i++) 
                    {
                        IHTMLDOMNode child_node = (IHTMLDOMNode)allchild.item(i);
                        string m_snodeName = child_node.nodeName;
                        object m_onodevalue = child_node.nodeValue;
                        string m_snodetype = child_node.nodeType.ToString();

                        if (m_onodevalue != null)
                            m_snodevalue = m_onodevalue.ToString().Trim();

                        TreeNode tempnode = null;
                        if (child_node.nodeName.Equals("#text"))
                        {
                            if ((m_snodevalue != null) && (!m_snodevalue.Equals("")))
                            {
                                tempnode = tree_node.Nodes.Add(m_snodevalue);
                                tempnode.Name = child_node.nodeName;
                            }
                        }
                        else
                        {
                            IHTMLElement ele = (IHTMLElement)child_node;

                            tempnode = tree_node.Nodes.Add(child_node.nodeName);
                            tempnode.Name = child_node.nodeName;
                            InsertDOMNodes(child_node, tempnode);
                        }
                    }
                }
            }

    • 已移动 彬慈Moderator 2009年6月18日 8:40 ([Loc]From:微软 .NET 俱乐部(INETA))
    2008年4月14日 2:44

答案

  •  

    能在Debug下固定重现嘛!

    如果可以的话,看Call Stack,这样可能会对你有所帮助。

     

    建议可以用Linq To XML,方便许多。

    真是好东西,和你分享一下。哈

    2008年4月16日 8:13

全部回复

  •  

    调试看看出错时

    Code Snippet

    allchild.item(i)

     

     

    是什么
    2008年4月14日 3:13
    版主
  •  

    能在Debug下固定重现嘛!

    如果可以的话,看Call Stack,这样可能会对你有所帮助。

     

    建议可以用Linq To XML,方便许多。

    真是好东西,和你分享一下。哈

    2008年4月16日 8:13