一尘不染

某些扩展名的Directory.GetFiles

c#

有没有一种方法可以简化此linq表达式,或者有更好的方法可以做到这一点?

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

基本上,我想返回某个扩展名的所有文件。不幸的是,这种方法不是很灵活。我希望能够将扩展名添加到列表中,并让Directory.GetFiles返回这些扩展名。那可能吗?


阅读 473

收藏
2020-05-19

共1个答案

一尘不染

如果要在LINQ中进行过滤,可以这样进行:

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

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

2020-05-19