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

如何通过CsvReader根据指定列索引获取列标题?

问题场景

使用CsvHelper读取CSV时,常规方式可直接通过实体类属性访问字段值,但当需要通过列索引(如record.GetField(columnIndex))获取字段值时,需要拿到该索引对应的CSV列标题,以此来创建XmlElement。

基础示例(来自官方文档)

CSV内容

Id,Name
1,one
2,two

实体类定义

public class Foo
{
    [Index(0)]
    public int Id { get; set; }

    [Index(1)]
    public string Name { get; set; }
}

基础读取代码

using (var reader = new StreamReader("path\\to\\file.csv"))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
    var records = csv.GetRecords<Foo>();
    foreach (var record in records)
    {
        // 直接通过属性访问字段
        // record.Id
        // record.Name
    }
}

解决方案

要通过列索引获取对应列标题,可借助CsvReader的Context.HeaderRecord属性——它存储了解析后的CSV表头数组,直接通过索引即可获取对应标题:

修改后的读取代码

using (var reader = new StreamReader("path\\to\\file.csv"))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{
    // 先读取表头,确保HeaderRecord完成初始化
    csv.Read();
    csv.ReadHeader();
    
    var records = csv.GetRecords<Foo>();
    foreach (var record in records)
    {
        // 遍历所有列索引
        for (int columnIndex = 0; columnIndex < csv.Context.HeaderRecord.Length; columnIndex++)
        {
            // 通过索引获取字段值
            var fieldValue = record.GetField(columnIndex);
            // 通过索引获取对应列标题
            var columnHeader = csv.Context.HeaderRecord[columnIndex];
            
            // 此处添加用columnHeader创建XmlElement的逻辑
            // 示例:
            // XmlElement element = doc.CreateElement(columnHeader);
            // element.InnerText = fieldValue;
        }
    }
}

关键说明

  • csv.Context.HeaderRecord是字符串数组,与CSV列的索引一一对应,直接存储各列的表头文本。
  • 必须先调用csv.Read()和csv.ReadHeader(),确保表头被正确解析,否则HeaderRecord会为null。

内容的提问来源于stack exchange,提问作者Andrew Truckle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:57:25