【发布时间】:2019-02-18 08:19:19
【问题描述】:
我需要从目录中获取完整路径,但使用数组排除某些路径,而不将完整路径输入到数组中。
我得到这样的目录路径:
List<string> dirs = di.GetDirectories("vault*", SearchOption.AllDirectories)
.Select(x => x.FullName).ToList();
目录是这样的:我需要在C之后根据父级过滤。
C:\A\vault
C:\B\vault
C:\C\vault
我有一个这样的数组:
string[] exclude = new string[] {"A", "B"};
执行以下操作不起作用,因为它需要我输入要在数组中排除的路径的全名,这可能会令人讨厌:
dirs.Except(exclude);
我怎样才能更好地做到这一点,以便我可以轻松地更新数组而没有更长路径的所有无关字符?示例:在将来添加要排除的附加路径。
【问题讨论】:
-
您要排除所有包含 A 或 B 的路径(在您的示例中),
.contain不起作用吗? -
我已更新问题以显示目录结构。
-
regex 可能是最通用的方法,但如果在您的情况下,排除目录始终位于根 (c:) 之后,那么您可以使用数组中的根 + 值构建一个字符串,然后再次使用包含。
-
您也可以实现自己的like 运算符,其工作方式类似于SQL like 运算符...可以在这里看到类似的实现:stackoverflow.com/questions/5374481/like-operator-in-linq
标签: c#