繁体   English   中英

如何从IEnumerable中排除目录<DirectoryInfo>

[英]How do I exclude directories from an IEnumerable<DirectoryInfo>

我知道为什么当“ excl”列表包含多个字符串时,以下代码不起作用。 这是因为当在lambda中对每个字符串进行求值时,它现在都包含了先前在“ x”迭代中排除的所有内容。 我的问题是,如何才能在最终结果中正确排除多个项目?

var di = new DirectoryInfo(@"\\192.168.1.10\e$");

var excl = new List<string>();
excl.Add("Temp");
excl.Add("VSS");

var dirs = from d in di.GetDirectories()
           where (d.Attributes & FileAttributes.System) != FileAttributes.System
           select d;                       

dirs = excl
       .SelectMany(x => from d in dirs
       where !d.FullName.ToLowerInvariant().Contains(x.ToLowerInvariant())
       select d)
       .Distinct().ToArray();

您似乎想做的是这样的(嵌套迭代):

dirs = dirs.Where(d => !excl.Any(x => d.FullName.ToLowerInvariant().Contains(x.ToLowerInvariant())))
   .Distinct().ToArray();

这样的事情应该起作用:

var di = new DirectoryInfo(@"\\192.168.1.10\e$");
var dirs = di.EnumerateDirectories()
             .Where(d=> !excl.Any(e=>d.FullName.ToLowerInvariant().Contains(e)));

不过,我会考虑您的排除标准-您要排除每个包含排除字符串的目录,还是只排除名称排除项匹配的目录?

同样,为了更快地执行此操作,您可以从排除列表中创建HashSet<string>并使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM