如何从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();
您想要做的似乎是(嵌套迭代):
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>
并使用它。