根据多个选项过滤列表 [英] Filter a list based on a multiple options

查看:77
本文介绍了根据多个选项过滤列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想根据特定的文件扩展名从文件夹返回文件列表.

I want to return a list of files from a folder, based on a specific file extension.

此刻,我得到了所有文件.如何过滤某些类型?

At the moment, I get all files. How do I filter out certain types?

此刻,我的代码如下:

public static List<FileInfo> BuildListOfFiles()
{
    var d = new DirectoryInfo(Constants.FolderToMonitor);
    if (d.Exists)
    {
        var files = (from file in d.EnumerateFiles() select file).ToList();
        return files;
    }
    return null;

}

但是我只想要

*.mp4,*.mpg,*.avi,*.mpeg

*.mp4, *.mpg, *.avi, *.mpeg

我认为我需要另一个.在哪里,但不确定如何干净地处理多种类型.

I think I need another .Where, but not sure how to handle multiple types cleanly.

推荐答案

您可以使用Linq进行过滤:

You can use Linq to do the filtering:

var searchExtensions = new string[] { ".mp4", ".mpg", ".avi", ".mpeg" };
var files = d.EnumerateFiles()
             .Where(f => searchExtensions.Contains(Path.GetExtension(file))
             .ToList();

或使用查询语法:

var searchExtensions = new string[] { ".mp4", ".mpg", ".avi", ".mpeg" };
var files = 
    (from file in d.EnumerateFiles()
     where searchExtensions.Contains(Path.GetExtension(file))
     select file)
    .ToList();

另一种解决方案是建立文件列表,而不是对其进行过滤:

An alternative solution would be to build up your file list rather than filtering it:

var searchPatterns = new string[] { "*.mp4", "*.mpg", "*.avi", "*.mpeg" };
var files = searchPatterns.SelectMany(p => d.EnumerateFiles(p))
                          .ToList();

或使用查询语法:

var searchPatterns = new string[] { "*.mp4", "*.mpg", "*.avi", "*.mpeg" };
var files = 
    (from pattern in searchPatterns
     from file in d.EnumerateFiles(pattern))
     select file)
    .ToList();

这篇关于根据多个选项过滤列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆