在DirectoryItem类型列表中查找和项目的有效方法是什么 -
List<DirectoryItem> lstRootDirectory = GetAllRootLevelDirectories();
每个DirectoryItem都有一个Items(相同类型的目录 - DirectoryItem),DirectoryItem是一个结构如下:
struct DirectoryItem
{
public string AbsolutePath { get { return string.Format("{0}/{1}", BaseUri, Name); } }
public bool IsDirectory;
public string Name;
public List<DirectoryItem> Items;
}
在这种情况下,从这种分层列表中找出项目的更好方法是什么。
答案 0 :(得分:1)
答案 1 :(得分:1)
如果你想找到嵌套的项目你可以使用递归,如果你在项目的名称之后搜索
private void searchAll(DirectoryItem root, string name)
{
for (int a = 0; a < root.Items.Count; a++)
{
if (name == root.Items[a].Name)
{
//
}
searchAll(root.Items[a], name);
}
}
答案 2 :(得分:1)
您还可以将树结构展平为一个列表,然后使用Linq在列表中进行搜索。
创建扩展方法:
public static IEnumerable<T> Flatten<T>(this IEnumerable<T> e, Func<T, IEnumerable<T>> f)
{
return e.SelectMany(c => f(c).Flatten(f)).Concat(e);
}
使用扩展方法:
IEnumerable<DirectoryItem> allDirectories = lstRootDirectory.Flatten(d => d.Items).ToList();
现在执行LINQ以查找DirectoryItem。