类中的foreach导致错误"对象引用未设置为对象的实例"

时间:2016-02-26 18:55:27

标签: c# xml class xaml foreach

当我运行此代码时,我有错误 "对象引用未设置为对象的实例" 扔了,我不明白为什么。

我已经使用debug来破解某些点上的代码,我注意到它在传递给子注释的foreach后会导致错误。

如果有人能对这个问题有所了解,我很高兴

我的Xml:

<?xml version=\"1.0\" encoding=\"utf - 8\"?>
<data type=\"array\" success=\"1\" status=\"200\">
<item>
    <id>1</id>
    <comment>aaa</comment>
    <author>john</author>
    <children/>
</item>
<item>
    <id>2</id>
    <comment>bbb</comment>
    <author>paul</author>
    <children>
        <item>
            <id>3</id>
            <comment>ccc</comment>
            <author>lisa</author>
            <children/>
        </item>
    </children>
</item>

我的代码:

 XDocument document = XDocument.Parse(xml);
 foreach (XElement item in document.Root.Elements("item"))
      {
           post.comments.Add(new Comment(item));
      }

我的班级:

 public class Comment
{
    public string id { get; set; }
    public string comment { get; set; }
    public string author { get; set; }
    public IList<Comment> children { get; set; }

    public Comment(XElement elem)
    {
        id = elem.Element("id").Value.ToString();
        comment = elem.Element("comment").Value.ToString();
        author = elem.Element("author").Value.ToString();

        foreach (XElement childComment in elem.Element("children").Elements())
        {
            children.Add(new Comment(childComment));
        }

    }
}

1 个答案:

答案 0 :(得分:0)

Comment的构造函数假定public IList<Comment> children已初始化,但没有代码实际创建列表。

如果您有权访问System.Linq,这是最简单的:

children = elem.Element("children").Elements().Select(el => new Comment(el)).ToList();

如果您不能加入using System.Linq,则可以在循环之前简单地初始化children成员:

children = new List<Comment>();
foreach (XElement childComment in elem.Element("children").Elements())
{
    children.Add(new Comment(childComment));
}