如何使用LINQ简化文件扩展名筛选代码?
简化LINQ文件扩展名筛选的方法
嘿,我明白你想把重复的EndsWith条件简化成更优雅的LINQ写法,刚好你已经定义了fileExt数组,我们可以利用它来优化代码,给你两种实用的方案:
方案1:利用Any()匹配任意扩展名
直接用数组的Any()方法替代多个||判断,代码更简洁,后续扩展扩展名列表也更方便:
string[] fileExt = { ".pdf", ".doc", ".docx" }; var fileEntries = Directory.EnumerateFiles(folderName, "*.*") .Where(s => fileExt.Any(ext => s.EndsWith(ext, StringComparison.OrdinalIgnoreCase)));
这里加了StringComparison.OrdinalIgnoreCase是为了兼容大小写不同的扩展名(比如.PDF或者.Docx),如果你的场景只需要严格匹配大小写,可以去掉这个参数。
方案2:用HashSet提升性能(适合大量文件场景)
如果要处理的文件数量很多,或者扩展名列表比较长,推荐先把扩展名转成HashSet,再结合Path.GetExtension()来判断,查找效率会更高:
string[] fileExt = { ".pdf", ".doc", ".docx" }; var extHashSet = new HashSet<string>(fileExt, StringComparer.OrdinalIgnoreCase); var fileEntries = Directory.EnumerateFiles(folderName, "*.*") .Where(s => extHashSet.Contains(Path.GetExtension(s)));
Path.GetExtension(s)会直接提取文件的扩展名(比如从test.docx得到.docx),然后用HashSet的Contains方法快速判断是否在目标列表里,这种写法逻辑更清晰,性能也更优。
两种方案都能达到简化代码的目的,你可以根据自己的实际场景选择~
内容的提问来源于stack exchange,提问作者emsimpson92
相关产品推荐
相关产品推荐

