我对这是否是检索我需要的最佳方法感到有点困惑。我已经从使用ftp的目录中获得了一个文件列表。我需要根据用户输入的文件掩码过滤文件名列表到List<string>
。我喜欢LINQ,但几个月没用过它我似乎已经失去了一些技能。到目前为止,我已经提出了以下建议。如果有人能够验证我所做的是最好的方法,我会很高兴。
foreach (string s in fileMasks)
{
fileNames.AddRange(
directory.Files.ToList().Where(a => a.Name.EndsWith(s))
.Select(b => b.Name)
);
}
答案 0 :(得分:2)
你可以简化你的查询
fileNames.AddRange(directory.Files.Select(f => f.Name).Where(a => a.EndsWith(s));
答案 1 :(得分:2)
似乎没问题,但你可以跳过中间的.ToList()
。
您也可以使用查询语法重写
fileNames.AddRange(
from file in directory.Files
where file.Name.EndsWith
select file.Name
);
我经常发现查询语法更容易阅读。
答案 2 :(得分: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
方法允许您执行此操作。
答案 3 :(得分:0)
没有foreach声明的解决方案
fileNames.AddRange(
(from file in directory.Files
from m in fileMasks
where file.Name.EndsWith(m)
select file.Name));