CSVHelper 如何不对索引进行硬编码
CSVHelper How to not hardcode indexes
我有以下代码:
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[] 索引传递给地图。地图由参数Type classMapType决定。 class 映射(此处未包含)有一个接受 int[] 的构造函数。如何实现这一目标?
我试过 Activator.CreateInstance() 但是 returns 一个对象。
感谢您的宝贵时间。
编辑:
我收录了其中一张 class 地图,并不意味着它是唯一一张。
我尝试使用 .GetType() 但 returns 出错,因为没有参数为零的构造函数。试图找到另一种方法但找不到。
csvWriter.Context.RegisterClassMap(new MyClassMap(indexes));
我有以下代码:
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[] 索引传递给地图。地图由参数Type classMapType决定。 class 映射(此处未包含)有一个接受 int[] 的构造函数。如何实现这一目标?
我试过 Activator.CreateInstance() 但是 returns 一个对象。
感谢您的宝贵时间。
编辑: 我收录了其中一张 class 地图,并不意味着它是唯一一张。
我尝试使用 .GetType() 但 returns 出错,因为没有参数为零的构造函数。试图找到另一种方法但找不到。
csvWriter.Context.RegisterClassMap(new MyClassMap(indexes));