MailKit: 在 .NET 中实现高效电子邮件发送与接收

devtools/2025/2/27 11:42:56/

CsvHelper 是一个用于处理 CSV 文件的 .NET 库,能够简化 CSV 文件的读写操作,尤其是在处理复杂的数据结构时。支持快速、灵活且易于使用的读取和写入操作,并且完全免费用于商业用途。

1. 安装

第一步,老规矩,先安装

dotnet add package CsvHelper

2. 基本用法

写入 CSV 文件

using CsvHelper;
using CsvHelper.Configuration;
using System.Globalization;
using System.IO;
using System.Collections.Generic;public class Person
{public string Name { get; set; }public int Age { get; set; }
}public void WriteCsv()
{var records = new List<Person>{new Person { Name = "Alice", Age = 30 },new Person { Name = "Bob", Age = 25 }};var config = new CsvConfiguration(CultureInfo.InvariantCulture){HasHeaderRecord = true,  // 写入头部};using (var writer = new StreamWriter("people.csv"))using (var csv = new CsvWriter(writer, config)){csv.WriteRecords(records);}
}
  • WriteRecords() 方法将 List<T> 数据写入到 CSV 文件中。
  • HasHeaderRecord = true 表示写入列名。

2.1 读取 CSV 文件

使用 CsvReader 类可以轻松读取 CSV 文件并将其映射为 C# 对象。

using CsvHelper;
using CsvHelper.Configuration;
using System.Globalization;
using System.IO;
using System.Linq;public class Person
{public string Name { get; set; }public int Age { get; set; }
}public void ReadCsv()
{var config = new CsvConfiguration(CultureInfo.InvariantCulture){HasHeaderRecord = true,  // CSV 文件是否包含头部};using (var reader = new StreamReader("people.csv"))using (var csv = new CsvReader(reader, config)){var records = csv.GetRecords<Person>().ToList();foreach (var record in records){Console.WriteLine($"Name: {record.Name}, Age: {record.Age}");}}
}
//读取索引头
public class Foo
{[Index(0)]public int age { get; set; }[Index(1)]public string Name { get; set; }
}
//指定名称
public class Foo
{[Name("id")]public int Id { get; set; }[Name("name")]public string Name { get; set; }
}

3. 配置选项

CsvHelper 提供了多种配置选项,可以通过 CsvConfiguration 类进行自定义:

  • 分隔符:如果 CSV 文件的分隔符是其他字符,可以设置 Delimiter 属性。
  • 忽略空白行IgnoreBlankLines = true,可以忽略文件中的空白行。
  • 自动映射csv.AutoMap() 方法可以让 CsvHelper 自动映射列名和类的属性。
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{Delimiter = ";",  // 使用分号作为分隔符IgnoreBlankLines = true,  // 忽略空白行
};

4. 自定义映射

如果需要控制 CSV 列和类属性之间的映射关系,可以实现自定义映射类。

using CsvHelper.Configuration;public class PersonMap : ClassMap<Person>
{public PersonMap(){Map(m => m.Name).Name("Full Name"); // 将 "Full Name" 列映射到 Name 属性Map(m => m.Age).Name("Years Old");  // 将 "Years Old" 列映射到 Age 属性}
}public void ReadCsvWithMap()
{var config = new CsvConfiguration(CultureInfo.InvariantCulture){HasHeaderRecord = true,};using (var reader = new StreamReader("people.csv"))using (var csv = new CsvReader(reader, config)){csv.Context.RegisterClassMap<PersonMap>();  // 注册映射类var records = csv.GetRecords<Person>().ToList();foreach (var record in records){Console.WriteLine($"Name: {record.Name}, Age: {record.Age}");}}
}

5. 错误处理

CsvHelper 提供了异常处理机制来处理 CSV 文件中的错误。

try
{using (var reader = new StreamReader("people.csv"))using (var csv = new CsvReader(reader, new CsvConfiguration(CultureInfo.InvariantCulture))){var records = csv.GetRecords<Person>().ToList();}
}
catch (CsvHelperException ex)
{Console.WriteLine($"Error reading CSV file: {ex.Message}");
}

6. 总结

CsvHelper 是一个功能强大的库,提供了多种方式来读取和写入 CSV 文件。通过配置和自定义映射,可以轻松地处理不同格式的 CSV 文件。如果需要进行复杂的数据转换,CsvHelper 也能够满足需求。

7. 资源链接

  • 仓库地址:https://github>github.com/JoshClose/CsvHelper
  • 文档地址:https://joshclose.github>github.io/CsvHelper


http://www.ppmy.cn/devtools/163049.html

相关文章

矩阵的 正定(Positive Definite)与负定(Negative Definite):从Fisher信息矩阵看“曲率”的秘密

矩阵的正定与负定&#xff1a;从Fisher信息矩阵看“曲率”的秘密 在数学和统计学中&#xff0c;矩阵的“正定性”和“负定性”是一对重要概念&#xff0c;尤其在优化、统计推断和机器学习中频繁出现。比如&#xff0c;Fisher信息矩阵&#xff08;Fisher Information Matrix, F…

深入理解 并查集LRUCaChe

并查集&LRUCaChe 个人主页&#xff1a;顾漂亮 文章专栏&#xff1a;Java数据结构 1.并查集的原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后根据一定规律将归于同一组元素的…

【0010】HTML水平线标签详解

如果你觉得我的文章写的不错&#xff0c;请关注我哟&#xff0c;请点赞、评论&#xff0c;收藏此文章&#xff0c;谢谢&#xff01; 本文内容体系结构如下&#xff1a; 一、水平线标签概述 在HTML中&#xff0c;<hr>标签用于在网页上插入一条水平线&#xff0c;其主要…

网络安全复习资料

网络安全复习资料 1.计算机网络安全是指保持网络中的硬件、软件系统正常运行&#xff0c;使他们不因自然和人为的因素而受到破坏、更改和泄露。 2.网络安全&#xff1a;物理安全&#xff0c;软件安全&#xff0c;信息安全&#xff0c;运行安全。 3.安全防范措施&#xff1a…

Docker快速使用指南

docker pull ubuntu:22.04 //先拉取一个基础镜像&#xff0c;一般是操作系统创建一个Dockerfile&#xff0c;放在任意目录下&#xff0c;内容如下 # 使用 Ubuntu 22.04 作为基础镜像 FROM ubuntu:22.04# 设置环境变量&#xff0c;避免安装过程中出现交互提示 ENV DEBIAN_FRONT…

【每日八股】Redis篇(二):数据结构

Redis 数据类型&#xff1f; 主要有 STRING、LIST、ZSET、SET 和 HASH。 STRING String 类型底层的数据结构实现主要是 SDS&#xff08;简单动态字符串&#xff09;&#xff0c;其主要应用场景包括&#xff1a; 缓存对象&#xff1a;可以用 STRING 缓存整个对象的 JSON&…

Windows 图形显示驱动开发-WDDM 3.2-自动显示切换(八)

适配器启动时间 驱动程序启动时&#xff0c;需要响应 OS 的轮询请求。 驱动程序可以通过尝试通信来发现多路复用器是否切换到了它们&#xff0c;但这可能会很耗时或不可靠。 作为 GPU 启动序列的一部分&#xff0c;OS 会调用 DxgkDdiDisplayMuxUpdateState DDI&#xff0c;以显…

广州4399游戏25届春招游戏策划管培生内推

【热招岗位】 游戏策划管培生、产品培训生、游戏文案策划、游戏数值策划、游戏系统策划、游戏产品运营、游戏战斗策划、游戏关卡策划 【其他岗位】产品类&#xff08;产品培训生、产品运营等&#xff09;、技术类&#xff08;开发、测试、算法、运维等&#xff09;、运营市场类…