如何从IEnumerable<;目录信息>;

本文关键字:信息 gt lt IEnumerable | 更新日期: 2023-09-27 18:23:53

我知道当"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();

如何从IEnumerable<;目录信息>;

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

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>并使用它。