我有以下代码:

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 Framework4.0/LINQ执行此操作的最有效方式是什么?有什么建议吗?

如果能成为一名临时程序员,我将不胜感激:-)

推荐答案

我创建了一些帮助器方法来解决这个问题,我在今年早些时候做了blogged个.

一个版本采用正则表达式模式\.mp3|\.mp4,另一个版本采用字符串列表并并行运行.

public static class MyDirectory
{   // Regex version
   public static IEnumerable<string> GetFiles(string path, 
                       string searchPatternExpression = "",
                       SearchOption searchOption = SearchOption.TopDirectoryOnly)
   {
      Regex reSearchPattern = new Regex(searchPatternExpression, RegexOptions.IgnoreCase);
      return Directory.EnumerateFiles(path, "*", searchOption)
                      .Where(file =>
                               reSearchPattern.IsMatch(Path.GetExtension(file)));
   }

   // Takes same patterns, and executes in parallel
   public static IEnumerable<string> GetFiles(string path, 
                       string[] searchPatterns, 
                       SearchOption searchOption = SearchOption.TopDirectoryOnly)
   {
      return searchPatterns.AsParallel()
             .SelectMany(searchPattern => 
                    Directory.EnumerateFiles(path, searchPattern, searchOption));
   }
}

.net相关问答推荐

为什么在WinForm应用程序中创建组件类椭圆会在www.example.com中没有响应

条带连接支付—引发异常

创建仅包含msBuild.Target的Nuget包

Azure Function应用程序-如何升级.NET运行时

dotnet ef dbcontext scaffold command --data-annotations 或 -d 命令行参数似乎不起作用

查找所有源硬编码字符串

如何以编程方式判断类型是 struct 还是类?

每第 N 个字符/数字拆分一个字符串/数字?

如何将字符串列表数据绑定到 WPF/WP7 中的 ListBox?

Java 和 .NET 技术/框架的类似物

ASP.NET Core 等效于 ASP.NET MVC 5 的 HttpException

在 .NET 中查找下一个 TCP 端口

如何确定字符串是 C# 中的有效 IPv4 还是 IPv6 地址?

如何在 Action 中传递参数?

如何从头开始以编程方式配置 log4net(无配置)

获取系统中已安装的应用程序

如何在 nuspec 中指定特定的依赖版本?

如何判断对象是否已在 C# 中释放

程序员应该使用 SSIS,如果是,为什么?

在 C#/.NET 中合并两个图像