Способ подсчета всех элементов в списке иерархических объектов

StackOverflow https://stackoverflow.com/questions/921251

Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top