使用 LINQ 根据单独的给定扩展数组过滤文件

Use LINQ to filter files based on separate given extension array

我正在研究 .NET CORE 6 解决方案。我有文件列表以及每个扩展名和另一个扩展名列表,即 .csv。我想让 LINQ 根据列表 2 过滤列表 1 中的文件。即,如果列表 2 有 .csv 和 .txt,那么 LINQ 应该只过滤掉 .csv 和 .txt 文件。我确实实施了解决方案,但它正在使用循环

  private List<string> FilterFilesWithAcceptedExtenison(List<string> files, List<string> acceptedExtensions)
    {
        List<string> FilteredFiles = new List<string>();

        foreach(var file in files)
        {
            var extension = Path.GetExtension(file);

            if (acceptedExtensions.Contains(extension))
            {
                FilteredFiles.Add(file);
            }
        }

        return FilteredFiles;
    }

您可以使用 .Where() 子句根据给定条件过滤 files。喜欢,

Filters a sequence of values based on a predicate.

using System.Linq;
using System.Collections.Generic;

...
List<string> FilteredFiles = files
     .Where(file => acceptedExtensions.Contains(Path.GetExtension(file))
     .ToList();

简直了

var filteredFiles = files.Where(f => acceptedExtensions.Contains(Path.GetExtension(f)));

如果你真的需要它是List<string>,你可以在最后加上ToList()