You need to enable JavaScript to run this app. C# Reactive Extensions 如何根据指定扩展名字符串动态过滤文件
优惠活动
大模型
产品
解决方案
定价
更多

C# Reactive Extensions 如何根据指定扩展名字符串动态过滤文件

实现方案

该方案仅需调用一次Where操作符,同时支持动态配置多扩展名,还能避免你原有Contains写法误匹配的问题(比如文件名包含扩展名字符但不是后缀的场景)。

步骤1:预处理允许的扩展名集合

提前把逗号分隔的配置字符串转换为哈希集合,避免每次过滤时重复拆分字符串,提升性能:

// 你的自定义配置扩展名串,可动态修改
string allowedExtConfig = "JPG,PNG,TXT";
HashSet<string> allowedExts = allowedExtConfig.Split(',', StringSplitOptions.RemoveEmptyEntries)
    .Select(ext => ext.Trim().ToLowerInvariant())
    .ToHashSet();

步骤2:单次调用Where实现过滤

.Where(e => 
{
    // 提取文件扩展名,去掉前置的.并转小写统一匹配规则
    string fileExt = Path.GetExtension(e.FullPath).TrimStart('.').ToLowerInvariant();
    return allowedExts.Contains(fileExt);
})

可选简化写法(适合扩展名数量少的场景)

如果允许的扩展名数量很少,不想提前维护集合,也可以直接在Where内做匹配:

.Where(e => allowedExtConfig.Split(',')
    .Any(ext => string.Equals(
        Path.GetExtension(e.FullPath).TrimStart('.'),
        ext.Trim(),
        StringComparison.OrdinalIgnoreCase
    )))

注意事项

  • 统一大小写匹配逻辑,兼容Windows、macOS等不同系统的文件扩展名大小写不敏感的规则
  • 提前拆分配置为哈希集合的方案更适合高频文件流的场景,避免每次过滤都产生字符串拆分的GC开销

内容的提问来源于stack exchange,提问作者Sebastian Halik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 01:36:02