有没有一种方法来简化这个LINQ表达式,或者是有这样做的更好的办法?
Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
.Where(s => s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) ||
s.EndsWith(".gif", StringComparison.OrdinalIgnoreCase) ||
s.EndsWith(".png", StringComparison.OrdinalIgnoreCase) ||
...);
基本上我想返回特定扩展名的所有文件。 不幸的是,这种方法不是很灵活。 我宁愿能扩展添加到列表中,并有Directory.GetFiles返回这些扩展。 那可能吗?
如果你想你做滤波,LINQ,你可以做这样的:
var ext = new List<string> {".jpg", ".gif", ".png"};
var myFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
.Where(s => ext.Contains(Path.GetExtension(s)));
现在ext
包含了允许扩展名列表; 你可以添加或删除其项目所必需的灵活的过滤。
未在Directory.GetFiles(String, String)
过载已经做到这一点? 你会只是做Directory.GetFiles(dir, "*.jpg", SearchOption.AllDirectories)
如果你想将它们放在一个列表,然后只需更换"*.jpg"
与在一个列表进行迭代,并汇总结果为总的结果集的变量。 远远高于单独去指定清晰。 =)
就像是...
foreach(String fileExtension in extensionList){
foreach(String file in Directory.GetFiles(dir, fileExtension, SearchOption.AllDirectories)){
allFiles.Add(file);
}
}
(如果您的目录很大,使用EnumerateFiles
代替GetFiles
有可能成为更有效)
我只用一条线之所为
List<string> imageFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
.Where(file => new string[] { ".jpg", ".gif", ".png" }
.Contains(Path.GetExtension(file)))
.ToList();