代码中的null引用异常

时间:2010-05-16 14:21:13

标签: c# xml c#-3.0 nullreferenceexception

我在“_attr.Append(xmlNode.Attributes [”name“]);”上收到NullReferenceException错误。

namespace SMAS
{
class Profiles
{
    private XmlTextReader _profReader;
    private XmlDocument _profDoc;

    private const string Url = "http://localhost/teamprofiles.xml";
    private const string XPath = "/teams/team-profile";

    public XmlNodeList Teams{ get; private set; }
    private XmlAttributeCollection _attr;

    public ArrayList Team { get; private set; }

    public void GetTeams()
    {
        _profReader = new XmlTextReader(Url);
        _profDoc = new XmlDocument();

        _profDoc.Load(_profReader);
        Teams = _profDoc.SelectNodes(XPath);

        foreach (XmlNode xmlNode in Teams)
        {
            _attr.Append(xmlNode.Attributes["name"]);
        }
    }
}
}

teamprofiles.xml文件看起来像

  <teams>
    <team-profile name="Australia">
      <stats type="Test">
        <span>1877-2010</span>
        <matches>721</matches>
        <won>339</won>
        <lost>186</lost>
        <tied>2</tied>
        <draw>194</draw>
        <percentage>47.01</percentage>
      </stats>
      <stats type="Twenty20">
        <span>2005-2010</span>
        <matches>32</matches>
        <won>18</won>
        <lost>12</lost>
        <tied>1</tied>
        <draw>1</draw>
        <percentage>59.67</percentage>
      </stats>
    </team-profile>
    <team-profile name="Bangladesh">
      <stats type="Test">
        <span>2000-2010</span>
        <matches>66</matches>
        <won>3</won>
        <lost>57</lost>
        <tied>0</tied>
        <draw>6</draw>
        <percentage>4.54</percentage>
      </stats>
    </team-profile>
 </teams>

我正在尝试提取ArrayList中所有团队的名称。然后我将提取所有团队的所有统计数据并在我的应用程序中显示它们。你可以帮我解决那个空引用异常吗?

4 个答案:

答案 0 :(得分:3)

我无法看到您初始化private XmlAttributeCollection _attr;

的位置

你可以尝试

 _profDoc.Load(_profReader);
_attr =  _profDoc.DocumentElement.Attributes;

答案 1 :(得分:3)

您永远不会初始化_attr。这是一个空引用。

答案 2 :(得分:1)

正如其他人所说,你必须初始化_attr。

有什么价值?

XmlAttributeCollection返回XmlElement.Attributes。如果你想要的是元素的属性,你可以使用该属性。如果您想要的是“XmlAttribute的集合”但不强制XmlAttributeCollection,您可以这样声明:

ICollection<XmlAttribute> _attr = new List<XmlAttribute>();

然后使用ICollection<T>.Add代替Append

或者,使用LINQ:

_attr = (from node in Teams
        select node.Attributes["name"]).ToList();

答案 3 :(得分:0)

您似乎没有向_attr分配任何内容,因此它当然是null