【问题标题】:Why is this throwing a null reference exception?为什么这会引发空引用异常?
【发布时间】:2013-02-14 11:30:17
【问题描述】:

谁能告诉我为什么这会引发空引用异常(对象引用未设置为对象的实例)。我的代码读取一个简单的 xml 文件,然后应该将 2 个元素中的文本传递给另一个方法。但是在 foreach 循环的第一行会抛出异常:

请原谅我的无知,我是新人。 :)

private void openProjectToolStripMenuItem_Click(object sender, EventArgs e)
{
    //I have to pass 'this' (which is Form1) when creating the Projects (Form2) in order for them to understand / see each other      
    Projects myProjects = new Projects(this); 

    //displays the Form 2 (called Projects)
    myProjects.Show(); 

    XmlDocument xdoc = new XmlDocument();
    xdoc.Load("O:\\TestDaws\\projects.xml");

    string projList = "/Projects/Project";
    XmlNodeList xprojects = xdoc.SelectNodes(projList);

    foreach (XmlNode xNodeName in xprojects)
    {
        string projectname = xNodeName.SelectNodes("/ProjectName")[0].InnerText.ToString();
        string projecttype = xNodeName.SelectNodes("/ProjectType")[0].InnerText.ToString();
        myProjects.buildProjectList(projectname, projecttype);
    }

}

【问题讨论】:

  • 在进入foreach循环之前,是否设置了断点并检查xprojects不为空?
  • 你在哪里得到空值?
  • @DarthVader 来自 OP:However the exception is thrown at the first line of the foreach loop
  • 我猜没有ProjectName的标签,这是一个列表,也就是null/

标签: c#


【解决方案1】:

SelectNodes("/ProjectName") 更改为SelectNodes("./ProjectName")。 (当然/ProjectType 也一样)

/ProjectName 将始终从根中选择,而不是从您调用它的节点中选择。 ./ 从当前节点开始。

【讨论】:

  • @user2008060 - 解释见我回答的第二行
【解决方案2】:

这意味着xprojectsnull
能否请您发布您的 projects.xml 文件内容。

问候,
奥马尔

【讨论】:

  • 是的,它会抛出一个 NullPointerException
猜你喜欢
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 2012-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多