ディレクトリ内にある.jpgや.pngなど画像ファイルの拡張子をもつファイルを絞り込みたい。
// 
// ディレクトリ内の画像ファイルを絞り込む
// 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.IO;
// コンパイル
// csc PicFileSearch.cs
class PicFileSearch {
    // エントリーポイント
    static void Main() {
        // 対象の画像ファイルの拡張子一覧
        var picExt = new List<string> {
            ".png",
            ".jpg",
            ".jpge",
            ".bmp",
            ".gif",
        };
        string targetDir = @"./img/";
        var d = Directory.EnumerateFiles(targetDir)
            .Where(x => picExt.Contains(Path.GetExtension(x).ToLower()));
        
        // 結果の表示
        Console.WriteLine("List<string>.Contains()");
        foreach (string f in d) {
            Console.WriteLine("{0}", f);
        }
        // 正規表現
        string pattern = @".(jp(e)?g|bmp|png|gif)$";
        var e = Directory.EnumerateFiles(targetDir)
            .Where(x => Regex.IsMatch(x, pattern, RegexOptions.IgnoreCase));
        
        // 結果の表示
        Console.WriteLine("正規表現");
        foreach (string f in e) {
            Console.WriteLine("{0}", f);
        }
    }
}.NETでファイルの一覧を取得する方法のうちの一つでSystem.IO.Directory.EnumerateFiles()を試してみました。
このメソッドの戻り値はIEnumerable<string>だったりするので、LINQを使った絞り込みやforeachすることが出来ます。また、同じIEnumerable<T>属のList<T>に変換することも容易です。LINQの場合、絞り込んだ後、項目を加工、並べ替えなどの処理をつなげるて記述することも出来ます。
Whereで絞り込みをさせたいのですが、拡張子が複数あり条件式が長くなりがちです。
絞り込みの条件にListRegex.IsMatch()を試してみました。
Regex.IsMatchで正規表現によるマッチングは、文字列の末尾とのマッチや大文字小文字の両方とマッチなど、通常の文字列操作数回分を1回の命令で表現することが出来ます。
List
 
  
  
  
  

コメント
コードの部分が
// 正規表現
string pattern = @”\.(jp(e)?g|bmp|png|gif)$”;
var e = Directory.EnumerateFiles(targetDir)
.Where(x => Regex.IsMat
までしか表示されていません。
私のブラウザの環境、設定が原因かもしれませんが、
chrome,firefox,edge の各ブラウザで同様です。
私はLINQは不得意で、たいへん勉強になる記事なので
もし不具合でしたら改善いただければ幸いです。
ご指摘ありがとうございます。
不具合と思われる部分を修正してみました。
ご不便をおかけいたしまして申し訳ございません。
早速のご対応ありがとうございます。
ちゃんと動きました。