C# 方法对分层对象列表中的所有项进行计数

C# 方法对分层对象列表中的所有项进行计数,c#,c#-3.0,recursion,hierarchy,C#,C# 3.0,Recursion,Hierarchy,我有一个简单的类定义为: public class MyClass { //Some properties public List<MyClass> SubEntries { get; set; } //Some more properties } 公共类MyClass { //一些性质 公共列表子项{get;set;} //更多属性 } 在另一个类中,我有一个上述类型的列表。目前,我有严重的精神障碍。我只需要在列表中创建并计算MyClass的所有事件。由于Su

我有一个简单的类定义为:

public class MyClass
{
   //Some properties
   public List<MyClass> SubEntries { get; set; }
   //Some more properties
}
公共类MyClass
{
//一些性质
公共列表子项{get;set;}
//更多属性
}
在另一个类中,我有一个上述类型的列表。目前,我有严重的精神障碍。我只需要在列表中创建并计算MyClass的所有事件。由于SubEntries属性可以包含0个或多个条目,而这些条目本身可以包含0个或多个条目,因此我突然想到,我需要某种递归方法,除非LINQ提供了这样做的机制


如果您能帮助释放此心理日志阻塞,我们将不胜感激。

假设您不介意沿着树递归,并且假设列表始终为非空且没有周期:

public class MyClass
{
    public List<MyClass> SubEntries { get; set; }

    public int SubEntryCount
    {
        get { return 1 + SubEntries.Sum(x => x.SubEntryCount); }
    }
}
公共类MyClass
{
公共列表子项{get;set;}
公共整数子入口计数
{
获取{返回1+个子项.Sum(x=>x.SubEntryCount);}
}
}

您可能需要重命名它,以便清楚地知道它是子项的总数,而不仅仅是直接子项。

您的结构中允许循环吗?不,在这种情况下不需要。一如既往。感谢您的快速而有用的回复。@JonSkeet您能解释一下:为什么我们需要1+的SubEntryCount getter吗?@Jamaxack:我相信OP基本上是想包括该项目本身。但很难记住我5年半前的确切推理:)