在 C# (.NET) 中处理 CSV:完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在 C# (.NET) 中处理 CSV:完整指南



CSV(逗号分隔值)是交换表格数据最常用的格式之一。在 C# (.NET) 生态系统中,有多种处理 CSV 文件的方法:从手动解析到使用强大的第三方库。在本文中,我们将介绍在 .NET 中读取、写入和处理 CSV 数据的所有主要方法。



1. 使用 StreamReader 手动解析 CSV



最简单的方法是使用标准类 StreamReader 和 String.Split。但这种方法无法处理复杂情况(引号、数据内的逗号、换行符)。



using System;using System.IO;using System.Linq;

public class CsvSimpleReader{ public void ReadCsv(string filePath) { using (var reader = new StreamReader(filePath)) { while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); Console.WriteLine(string.Join(" | ", values)); } } }}


缺点:不处理转义的逗号和引号。对于实际项目,请使用更可靠的方法。



2. 使用 Microsoft.VisualBasic.FileIO.TextFieldParser(适用于 .NET Framework)



在 .NET Framework 中有一个内置的 CSV 解析器——TextFieldParser。它可以正确处理引号和分隔符。



using Microsoft.VisualBasic.FileIO;using System;using System.IO;

public class CsvTextFieldParser{ public void ParseCsv(string filePath) { using (var parser = new TextFieldParser(filePath)) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(",");

while (!parser.EndOfData) { string[] fields = parser.ReadFields(); Console.WriteLine(string.Join(" | ", fields)); } } }}


重要提示:在 .NET Core / .NET 5+ 中,此类可通过 Microsoft.VisualBasic 包(NuGet)获得。



3. CsvHelper 库(推荐方式)



CsvHelper 是 .NET 中最流行的 CSV 处理库。它支持映射到类、LINQ 查询、分隔符和编码配置。



通过 NuGet 安装:

Install-Package CsvHelper


3.1 将 CSV 读取到对象列表



using System.Globalization;using CsvHelper;using CsvHelper.Configuration;using System.IO;using System.Linq;using System.Collections.Generic;

public class Person{ public string Name { get; set; } public int Age { get; set; } public string Email { get; set; }}

public void ReadCsvWithCsvHelper(string filePath){ var config = new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = true, Delimiter = ",", MissingFieldFound = null };

using (var reader = new StreamReader(filePath)) using (var csv = new CsvReader(reader, config)) { var records = csv.GetRecords<Person>().ToList(); foreach (var person in records) { Console.WriteLine($"{person.Name}, {person.Age}, {person.Email}"); } }}


3.2 从对象集合写入 CSV



public void WriteCsvWithCsvHelper(string filePath, List<Person> people){    using (var writer = new StreamWriter(filePath))    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))    {        csv.WriteRecords(people);    }}


3.3 手动管理字段(无映射)



public void ManualCsvWrite(string filePath){    using (var writer = new StreamWriter(filePath))    using (va                    

推荐