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

本文关键字:设置 实例 对象引用 对象 错误 foreach | 更新日期: 2023-09-27 18:36:29

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

我已经使用调试在某些点上破坏了代码,我注意到它在传递子注释的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));
        }
    }
}

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

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));
}