0

これが必要なものを取得するための最良の方法であるかどうかについて、少し混乱しています。ftp を使用してディレクトリから取得したファイルのリストがあります。ユーザーが入力したファイル マスクに応じて、ファイル名のリストをフィルター処理する必要がありますList<string>。私は LINQ が大好きですが、数か月使用していないので、すでにスキルの一部を失っているようです。これまでのところ、次のことを思いつきました。私が行ったことが最善のアプローチであることを誰かが確認できれば幸いです。

foreach (string s in fileMasks)
{
    fileNames.AddRange(
        directory.Files.ToList().Where(a => a.Name.EndsWith(s))
        .Select(b => b.Name)
    );
}
4

4 に答える 4

2

大丈夫そうに見えますが.ToList()、途中で飛ばしても構いません。

クエリ構文で書き直すこともできます

fileNames.AddRange(
    from file in directory.Files
    where file.Name.EndsWith
    select file.Name
);

多くの場合、クエリ構文の方が読みやすいと思います。

于 2012-08-03T08:25:53.203 に答える
1

foreachループは必要ありません。拡張メソッドAddRangeを使用できます。SelectMany

List<string> result = directory
    .Files
    .SelectMany(f => fileMasks.Where(m => f.Name.EndsWith(m)), (f, m) => f.Name)
    .ToList();

または、LINQ構文の使用を希望する場合:

List<string> result =
    (from f in directory.GetFiles()
    from m in fileMasks
    where f.Name.EndsWith(m)
    select f.Name).ToList();

それがLINQです。ただし、ディレクトリのフィルタリングを扱っているため、ファイルマスクを使用できます。このDirectoryInfo.GetFiles方法では、これを行うことができます。

于 2012-08-03T08:30:10.800 に答える
0

foreachステートメントのないソリューション

fileNames.AddRange(
    (from file in directory.Files
    from m in fileMasks
    where file.Name.EndsWith(m)
    select file.Name)); 
于 2012-08-03T08:32:57.000 に答える