C#.Net遍历对象图

时间:2013-11-14 14:53:43

标签: c# .net traversal object-graph

我发现Eric Lippert编写的这个方法遍历一个对象图:

static IEnumerable<T> Traversal<T>(T item, Func<T, IEnumerable<T>> children)
{
    var seen = new HashSet<T>();
    var stack = new Stack<T>();
    seen.Add(item);
    stack.Push(item);
    yield return item;
    while (stack.Count > 0)
    {
        T current = stack.Pop();
        foreach (T newItem in children(current))
        {
            if (!seen.Contains(newItem))
            {
                seen.Add(newItem);
                stack.Push(newItem);
                yield return newItem;
            }
        }
    }
}

有没有人有一个如何使用它的例子?

1 个答案:

答案 0 :(得分:4)

假设有一个Console应用程序,以及一个以“C:\ TEST”为根的目录树,你可以这样做:

string root = "C:\\Test";
var folders = Traversal(root, Directory.EnumerateDirectories);

foreach (var folder in folders)
    Console.WriteLine(folder);

您也可以尝试string root = "C:\\Program Files (x86)";,但可能会获得访问权限。