CSVHelper 如何不对索引进行硬编码

Posted

技术标签:

【中文标题】CSVHelper 如何不对索引进行硬编码【英文标题】:CSVHelper How to not hardcode indexes 【发布时间】:2021-12-22 12:50:24 【问题描述】:

我有以下代码:

public static void WriteRecords(string fileSpecification, string[] headerRow, Type classMapType, int[] indexes, IEnumerable<object> records)

    using (StreamWriter streamWriter = new StreamWriter(fileSpecification))
    using (CsvWriter csvWriter = new CsvWriter(streamWriter, noHeaderConfiguration))
    
        csvWriter.Context.RegisterClassMap(classMapType); // How do I pass in the indexes without hardcoding
        WriteHeader(headerRow, csvWriter);
        csvWriter.NextRecord();
        csvWriter.WriteRecords(records);
    

// Edit One of the maps, does not mean only one I am calling.

public sealed class TimeZone_StartDate_Value_isGood_Description_FormatModelMap : ClassMap<TimeZone_StartDate_Value_isGood_Description_FormatModel>
    


        public TimeZone_StartDate_Value_isGood_Description_FormatModelMap(int[] indexes)

            
            Map(m => m.TimeZone).Index(indexes[0]);
            Map(m => m.StartDate).Index(indexes[1]);
            Map(m => m.Value).Index(indexes[2]);
            Map(m => m.IsGoodString).Index(indexes[3]);
            Map(m => m.Description).Index(indexes[4]);

        

// Edit 2 WriteHeader Method, asked to be included. Write header row for csv

private static void WriteHeader(string[] headerRow, CsvWriter csvWriter)

            for (int i = 0; i < headerRow.Length; i++)
            
                csvWriter.WriteField(headerRow[i]);
            

我想将 int[] 索引传递给地图。地图由参数类型classMapType 确定。类映射(此处不包括)有一个接受 int[] 的构造函数。如何做到这一点?

我尝试过 Activator.CreateInstance() 但它返回一个对象。

感谢您的宝贵时间。

编辑: 我包含了一个类映射,并不意味着它是唯一一个被调用的。

我尝试使用 .GetType() 但返回错误,因为没有零参数的 ctor。试图找到另一种方法,但找不到。

【问题讨论】:

我认为我们需要更多信息/代码来帮助您。 WriteHeader,你的class map的定义,indexes代表什么,你期望输出什么? 我已经编辑了这个问题。我希望这有帮助。如果这还不够,请告诉我。谢谢! 【参考方案1】:
csvWriter.Context.RegisterClassMap(new MyClassMap(indexes));

【讨论】:

谢谢!为我设置如何继续这个项目的路径。

以上是关于CSVHelper 如何不对索引进行硬编码的主要内容,如果未能解决你的问题,请参考以下文章

如何在触发器中循环所有列名称而不对其进行硬编码

如何在 Python 中将整数添加到此正则表达式中而不对整数进行硬编码? [复制]

如果不对 id(主键)进行硬编码,MySQL 插入语句将无法工作

如何在不进行硬编码的情况下在 C++ 中获取类数组的长度?

我想通过反射使用 MySQL,但不得不对 MySQL jar 文件进行硬编码——我可以从 Maven 下载最新版本吗?

.htaccess - 检查Referer匹配没有硬编码的主机?