Directory.GetFiles的某些扩展

有没有办法简化这个linqexpression式,还是有更好的方法呢?

Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories) .Where(s => s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) || s.EndsWith(".gif", StringComparison.OrdinalIgnoreCase) || s.EndsWith(".png", StringComparison.OrdinalIgnoreCase) || ...); 

基本上我想返回一个特定扩展名的所有文件。 不幸的是,这种方法不是很灵活。 我宁愿能够向列表添加扩展,并让Directory.GetFiles返回这些扩展。 那可能吗?

如果你想在LINQ中做你的过滤,你可以这样做:

 var ext = new List<string> {"jpg", "gif", "png"}; var myFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories) .Where(s => ext.Contains(Path.GetExtension(s))); 

现在ext包含允许的扩展名列表; 您可以根据需要添加或删除项目以进行灵活的过滤。

Directory.GetFiles(String, String)超载已经做到了吗? 你只需要做Directory.GetFiles(dir, "*.jpg", SearchOption.AllDirectories)

如果你想把它们放在一个列表中,那么用一个迭代列表的variablesreplace"*.jpg" ,然后将结果集合到一个整体结果集中。 比单独指定它们要清楚得多。 =)

就像是…

 foreach(String fileExtension in extensionList){ foreach(String file in Directory.GetFiles(dir, fileExtension, SearchOption.AllDirectories)){ allFiles.Add(file); } } 

(如果你的目录很大,使用EnumerateFiles代替GetFiles可能会更有效率)

我会完成像只使用单行

 List<string> imageFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories) .Where(file => new string[] { ".jpg", ".gif", ".png" } .Contains(Path.GetExtension(file))) .ToList();