Способ подсчета всех элементов в списке иерархических объектов
Вопрос
У меня есть простой класс, определенный как:
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); }
}
}
Возможно, вы захотите переименовать его, чтобы было ясно, что это итого количество вложенных элементов, а не только непосредственных дочерних элементов.