私は何をしようとしています:
拡張子のリスト(.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内のすべてのファイルをチェックして、上記のリストにある拡張子の1つ(つまり、.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と組み合わせて上記の説明を使用できますか?または、これを行う別の方法を探す必要がありますか?