我想做什么:
我有一个扩展名列表(.mpg、.avi、.jpg)……和一个文件名列表(stuff.jpg、dogs.txt、movie.avi)。
我想将文件名列表与扩展名列表进行比较,并且只保留扩展名匹配的文件。在上面的例子中,stuff.jpg 和movie.avi,dogs.txt 应该被忽略。
我是怎么做的:
我有一个字符串列表(文件扩展名,如 .mp3、mp4、.avi...):
List<String> extensions = new List<string>();
extensions.Add(".mp4");
extensions.Add(".mp3");
extensions.Add(".avi");
extensions.Add(".mkv");
extensions.Add(".mpeg");
extensions.Add(".mpg");
我还有一个包含多个文件的 IEnumerable。
我想要做的是检查 IEnumerable 中的每个文件,看看它的扩展名是否与我上面列表中的扩展名之一匹配(所以 .mpg,.mp3 ...)。
现在我正在这样做:
var files = dir.EnumerateFiles();
var newlist = files.Where(doesItMatch).Select(x => x).ToList();
private Func<FileInfo, bool> doesItMatch = x =>
{
return x.Extension == ".mp3";
};
这可行,但显然它只会检查它是否匹配“.mp3”。问题是我不想开始做类似的事情
where x == ".mp4" || x == ".avi" || x == ".mpg" ....
我基本上想遍历我的扩展列表中的每个元素,并将其与 IEnumerable 中文件的当前扩展名相匹配。
我试过做这样的foreach:
var newlist = files.Where(file => extensions.ForEach(ext => file.Extension == ext) ).Select(x => x).ToList();
但这给了我一个错误 file.Extension == ext
,指出只有“赋值,调用......可以用作语句”。
所以我的问题是,我可以在Func<>
扩展列表中使用上述内容并结合某种 foreach 吗?或者我应该寻找另一种方法吗?