使用linq检查树的长度

kos*_*kov 5 c# linq tree

嗨,我说我有以下类型的树

public class Element
{
    public List<Element> element;
}
Run Code Online (Sandbox Code Playgroud)

让我们说树的根是

Element root = GetTree();
Run Code Online (Sandbox Code Playgroud)

我知道可以使用递归来检查这棵树的长度,但是这可以使用linq来检查这棵树的长度吗?

Tim*_*ter 2

您可以编写一个扩展方法来递归地检索所有元素。

var allElements = root.element.Traverse(el => el.element);
Run Code Online (Sandbox Code Playgroud)

例如:

public static IEnumerable<T> Traverse<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> fnRecurse)
{
    foreach (T item in source)
    {
        yield return item;

        IEnumerable<T> seqRecurse = fnRecurse(item);
        if (seqRecurse != null)
        {
            foreach (T itemRecurse in Traverse(seqRecurse, fnRecurse))
            {
                yield return itemRecurse;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)