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

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

1. 安装

第一步,老规矩,先安装

bash 复制代码
dotnet add package CsvHelper

2. 基本用法

写入 CSV 文件

csharp 复制代码
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# 对象。

csharp 复制代码
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 自动映射列名和类的属性。
csharp 复制代码
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    Delimiter = ";",  // 使用分号作为分隔符
    IgnoreBlankLines = true,  // 忽略空白行
};

4. 自定义映射

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

csharp 复制代码
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 文件中的错误。

csharp 复制代码
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. 资源链接

相关推荐
皮克斯的进化之路11 分钟前
Git原理+使用(超详细)
git
wrjwww13 分钟前
【Git学习笔记】Git常用命令
笔记·git·学习
大乔乔布斯1 小时前
WSL,Power shell 和CMD, Git bash的区别
开发语言·git·bash
MicrosoftReactor3 小时前
技术速递|.NET 9 网络优化
网络·.net
瓜皮弟子头很铁3 小时前
.net websocket 使用
网络·websocket·网络协议·.net
程序视点6 小时前
惊喜升级!Claude 3.7 Sonnet 上线 GitHub Copilot!已全账号开放!
github·claude·github copilot
find_element_by_id8 小时前
git基本用法
git
誓约酱9 小时前
Qt layout
c语言·开发语言·c++·git·qt
x-cmd13 小时前
[250224] Yaak 2.0:Git集成、WebSocket支持、OAuth认证等 | Zstandard v1.5.7 发布
运维·git·websocket·网络协议·安全·oauth·压缩