Thursday, October 6, 2016

Generic extension method for traversing object graphs

public static IEnumerable Traverse(this T root, Func> getChildren)
{
    return Enumerable.Repeat(root, 1)
        .Concat((getChildren(root) ?? Enumerable.Empty())
            .SelectMany(child => Traverse(child, getChildren)));
}