Метод подсчета всех элементов в списке иерархических объектов - PullRequest
4 голосов
/ 28 мая 2009

У меня есть простой класс, определенный как:

public class MyClass
{
   //Some properties
   public List<MyClass> SubEntries { get; set; }
   //Some more properties
}

В другом классе у меня есть список вышеупомянутого типа. На данный момент у меня серьезный психический блок. Мне просто нужно перебрать список и сосчитать все вхождения MyClass. Поскольку свойство SubEntries может содержать 0 или более записей, которые сами могут содержать 0 или более записей, мне кажется, что мне нужен какой-то метод рекурсии, если только LINQ не предоставляет механизм для этого.

Буду признателен за любую помощь в устранении этого ментального журнала.

1 Ответ

11 голосов
/ 28 мая 2009

Предполагая, что вы не возражаете против повторения вниз по дереву, и предполагая, что список всегда ненулевой и не имеет циклов:

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

    public int SubEntryCount
    {
        get { return 1 + SubEntries.Sum(x => x.SubEntryCount); }
    }
}

Возможно, вы захотите переименовать его, чтобы было понятно, что это всего подсчетов, а не только непосредственных потомков.

...