You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用C# Linq替代循环实现与现有代码相同的PDF文件筛选?

用LINQ实现PDF文件筛选的方案

当然可以用LINQ替代循环实现这个需求!核心逻辑和你原来的代码保持一致,只是用LINQ的声明式语法替换了显式循环,代码会更简洁易读。

完整实现代码

这里有两种写法,你可以根据习惯选择:

写法一:链式调用(简洁版)

int _period = 10;
DirectoryInfo di = new DirectoryInfo(_path);

var sortedFiles = di.GetFiles()
                    .OrderByDescending(file => file.CreationTime)
                    .ToList();

List<string> pdffiles = sortedFiles.Any()
    ? sortedFiles.Where(file => file.CreationTime - sortedFiles.First().CreationTime <= TimeSpan.FromSeconds(_period))
                 .Select(file => file.FullName)
                 .ToList()
    : new List<string>();

写法二:提前缓存基准时间(更高效)

如果文件夹内文件数量特别多,这种写法可以避免多次调用sortedFiles.First(),性能会更优:

int _period = 10;
DirectoryInfo di = new DirectoryInfo(_path);

var sortedFiles = di.GetFiles()
                    .OrderByDescending(file => file.CreationTime)
                    .ToList();

List<string> pdffiles = new List<string>();

if (sortedFiles.Any())
{
    DateTime firstFileTime = sortedFiles.First().CreationTime;
    TimeSpan delay = TimeSpan.FromSeconds(_period);
    
    pdffiles = sortedFiles.Where(file => file.CreationTime - firstFileTime <= delay)
                         .Select(file => file.FullName)
                         .ToList();
}

逻辑说明

  1. 先获取目录下所有文件,并按创建时间降序排序,这一步和你原来的代码完全一致;
  2. 用Any()判断是否存在文件,避免空列表时触发空引用异常;
  3. 以第一个文件的创建时间为基准,用Where筛选出所有创建时间与基准时间间隔≤10秒的文件;
  4. 最后用Select提取文件的完整路径,转成List<string>类型。

这样就完全替代了原来的foreach循环,用LINQ完成了筛选需求。

内容的提问来源于stack exchange,提问作者karim harfakti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:23:08