C#读取文件行并将指定行转为以行号为键的Dictionary
问题解决与实现方案
你的代码错误原因
Select(x => x.StartsWith("A"))将原行序列转换为了bool类型的序列,后续操作的x是布尔值而非原行内容,完全偏离需求。x.GetHashCode缺少调用括号,正确写法是x.GetHashCode(),但即便修正,用布尔值的哈希值作为键既无意义也极易重复。
正确实现代码(流式处理+行号作为键)
Dictionary<int, string> lines = File .ReadLines(inputFilePath) .Select((line, lineIndex) => new { Content = line, LineNumber = lineIndex + 1 }) // 行号从1开始,若需从0起始则移除+1 .Where(item => item.Content.StartsWith("A")) .ToDictionary(item => item.LineNumber, item => item.Content);
关键说明
- 流式处理适配大文件:
File.ReadLines采用延迟加载机制,仅在迭代时逐行读取文件,不会将整个大文件加载至内存,完美契合大文件场景的性能需求。 - 行号作为天然唯一键:行号本身具备唯一性(只要文件行顺序固定),相比哈希值更可靠,无需额外去重操作。
内容的提问来源于stack exchange,提问作者jmath412
相关产品推荐
相关产品推荐

