我发现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;
}
}
}
}
有没有人有一个如何使用它的例子?
答案 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)";
,但可能会获得访问权限。