【发布时间】:2010-09-20 18:02:57
【问题描述】:
我有以下代码:
List<string> result = new List<string>();
foreach (string file in Directory.EnumerateFiles(path,"*.*",
SearchOption.AllDirectories)
.Where(s => s.EndsWith(".mp3") || s.EndsWith(".wma")))
{
result.Add(file);
}
它工作正常,可以满足我的需要。除了一件小事。我想找到一种更好的方法来过滤多个扩展。我想使用带有过滤器的字符串数组,例如:
string[] extensions = { "*.mp3", "*.wma", "*.mp4", "*.wav" };
使用 NET Framework 4.0/LINQ 最有效的方法是什么?有什么建议吗?
我会很感激作为临时程序员的任何帮助:-)
【问题讨论】:
-
您应该考虑并行运行每个扩展搜索。我在回答中创建了一些有用的辅助方法。一个接受正则表达式,一个接受字符串列表。
-
这是一个非常老问题(@MikaelSvenson 已经适当回答了),但另一种选择是使用 Enumerable 扩展名 .Union(),如下所示:foreach (var Directory.EnumerateFiles(path, ".mp3", SearchOption.AllDirectories).Union(Directory.EnumerateFiles(path, ".wma", SearchOption.AllDirectories)) { ... }跨度>