如何从列表中搜索哪个lambda?

时间:2017-07-22 19:50:13

标签: c# generics lambda

我想搜索传递多个文件扩展名的文件,但我想将其发送到列表中。

我怎样才能以干净的方式处理这个问题?

//I wanna pass my list to the Where method
List<string> fileExtensionList

//this works fine
var files = Directory.EnumerateFiles("C:\\path", "*.*", SearchOption.AllDirectories)
            .Where(s => s.EndsWith(".jpg") || s.EndsWith(".png"));

感谢

2 个答案:

答案 0 :(得分:5)

List<string> fileExtensionList = ...

var files = Directory.EnumerateFiles("C:\\path", "*.*", SearchOption.AllDirectories)
    .Where(fileName => fileExtensionList.Any(extension => fileName.EndsWith(extension)));

Any是集合的扩展方法。如果集合中的任何项目符合您的条件,则返回true

答案 1 :(得分:5)

虽然您可以使用EndsWith检查扩展名,但有更合适的方法可以使代码更简单:

var files = Directory.EnumerateFiles("C:\\path", "*.*", SearchOption.AllDirectories)
        .Where(s => fileExtensionList.Contains(Path.GetExtension(s)));