private void WalkDirectoryTree(DirectoryInfo root, WalkDelegate walkDelegate) { if (stop) { return; } var files = root.GetFiles("*.flt"); //var files = root.GetFiles("*.zip"); if (files != null) { foreach (FileInfo fi in files) { if (stop) { return; } walkDelegate(fi.FullName); } var subDirs = root.GetDirectories(); foreach (DirectoryInfo dirInfo in subDirs) { WalkDirectoryTree(dirInfo, walkDelegate); } } }
public void Walk(object obj, WalkDelegate callback) { //get or create type cache Type t = obj.GetType(); CachedType ct = _typeToInfo.GetOrAdd(t, () => new CachedType(t)); Walk(ct, obj, callback, 0); }
private void WalkLayers(Layer layer, WalkDelegate walkDelegate) { walkDelegate(layer); ++layerDepth; foreach (var child in layer.ChildLayers) { WalkLayers(child, walkDelegate); } --layerDepth; }
private void Walk(CachedType ct, object parent, WalkDelegate callback, int level) { foreach (Tuple<string, TypeNode> tpl in EnumerableEx.MultiIterate(ct.PropNames, ct.TypeNodes)) { if (!callback(tpl.Item1, tpl.Item2, parent, level)) return; if (tpl.Item2.HasChildren) { Type cht = tpl.Item2.NodeType; CachedType chct = _typeToInfo.GetOrAdd(tpl.Item2.NodeType, () => new CachedType(cht)); object cv = tpl.Item2.GetValue(parent); Walk(chct, cv, callback, level + 1); } } }