public static void RemoveAllFileNodesExcept(DirNode rootNode, HashSet <FileNode> except) { List <FileNode> nodesToRemove = new List <FileNode>(); foreach (FileNode fileNode in rootNode.EnumerateFileNodesRecursively()) { if (!except.Contains(fileNode)) { nodesToRemove.Add(fileNode); } } foreach (FileNode nodeToRemove in nodesToRemove) { nodeToRemove.Parent.DeleteFileNode(nodeToRemove.Name); } }