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

如何用LINQ基于IEnumerable<string>获取并分组文件扩展名

用LINQ按文件类型分组/排序的实现方法

你可以通过两种方式实现需求:直接使用Path.GetExtension(更轻量,无需实例化对象),或者通过FileInfo获取扩展名。以下是具体的LINQ实现代码:

按文件类型分组

方式1:使用Path.GetExtension(推荐)

// 按扩展名分组,忽略大小写(.txt和.TXT视为同一类型)
var groupedFiles = files
    .GroupBy(file => Path.GetExtension(file), StringComparer.OrdinalIgnoreCase);

// 遍历分组结果
foreach (var group in groupedFiles)
{
    Console.WriteLine($"扩展名: {group.Key},文件总数: {group.Count()}");
    foreach (var filePath in group)
    {
        Console.WriteLine($"  {filePath}");
    }
}

方式2:使用FileInfo

var groupedFiles = files
    .Select(file => new FileInfo(file))
    .GroupBy(fi => fi.Extension, StringComparer.OrdinalIgnoreCase);

// 遍历分组结果
foreach (var group in groupedFiles)
{
    Console.WriteLine($"扩展名: {group.Key},文件总数: {group.Count()}");
    foreach (var fileInfo in group)
    {
        Console.WriteLine($"  {fileInfo.FullName}");
    }
}

按文件类型排序

方式1:使用Path.GetExtension

// 先按扩展名排序(忽略大小写),再按文件名排序
var sortedFiles = files
    .OrderBy(file => Path.GetExtension(file), StringComparer.OrdinalIgnoreCase)
    .ThenBy(file => Path.GetFileName(file));

// 遍历排序后的结果
foreach (var filePath in sortedFiles)
{
    Console.WriteLine($"{Path.GetExtension(filePath)} - {filePath}");
}

方式2:使用FileInfo

var sortedFiles = files
    .Select(file => new FileInfo(file))
    .OrderBy(fi => fi.Extension, StringComparer.OrdinalIgnoreCase)
    .ThenBy(fi => fi.Name);

// 遍历排序后的结果
foreach (var fileInfo in sortedFiles)
{
    Console.WriteLine($"{fileInfo.Extension} - {fileInfo.FullName}");
}

说明:StringComparer.OrdinalIgnoreCase用于忽略扩展名的大小写差异,如果需要严格区分大小写,直接去掉该参数即可。

内容的提问来源于stack exchange,提问作者Julia Navarro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:55:33