C# 在较新版本的CsvHelper中,IWriterConfiguration.UseExcelLeadingZerosFormatForNumerics的等效功能是什么?
我们目前正在将一堆旧的NuGet软件包升级到最新版本。CsvHelper在我们使用的上一个版本(2.x)和最新版本(12.x)之间移动了很多东西。changelog没有提到很多这些更改(或者至少没有明确指出每个changelog条目中更改了哪些属性或方法),这阻碍了我们的升级过程 升级过程中,C# 在较新版本的CsvHelper中,IWriterConfiguration.UseExcelLeadingZerosFormatForNumerics的等效功能是什么?,c#,csvhelper,C#,Csvhelper,我们目前正在将一堆旧的NuGet软件包升级到最新版本。CsvHelper在我们使用的上一个版本(2.x)和最新版本(12.x)之间移动了很多东西。changelog没有提到很多这些更改(或者至少没有明确指出每个changelog条目中更改了哪些属性或方法),这阻碍了我们的升级过程 升级过程中,IWriterConfiguration.UseExcelLeadingZerosFormatForNumerics设置已消失,我很难找到新版本中的等效设置。我曾尝试跟踪中提交历史记录中的更改,但其中一个主
IWriterConfiguration.UseExcelLeadingZerosFormatForNumerics
设置已消失,我很难找到新版本中的等效设置。我曾尝试跟踪中提交历史记录中的更改,但其中一个主要版本号更改涉及许多类的重命名,这意味着我很难找到发生此更改的提交,因此我看不到新版本中的等效设置
我们需要确保升级前系统的行为与新行为相同。有人知道我将如何在当前软件包版本中复制此配置设置引起的行为吗?Jeroen Mostert指出,此配置选项行为的原始实现是在virtual
CsvWriter.WriteField
方法中。因此,如果需要,可以重新实现原始行为
由于该方法的结构,如果包维护人员将来更改CsvWriter.WriteField的行为或实现,似乎没有办法以不会潜在中断或导致难以检测的问题的方式重新实现该功能。但是,此派生类应至少适用于当前版本的CsvHelper(12.1.2):
该功能在2.11中引入,在3.0中删除(或者,至少,该版本不再具有该属性),以及所有其他Excel特定代码(如果可以相信的话),因此没有类似的设置。线程引用了一个存储库,但它实际上是空的。此功能非常小,而且CsvWriter.WriteField
仍然是virtual
,因此您在自定义派生的CsvWriter
类中应该不会遇到什么问题。@Jeroenmoster您好,感谢您找到了最初的实现——这正是我想要重新创建这种行为的原因,但我在回购历史中很难找到它。我将尝试按照您的建议重新创建它,并将其添加为答案。
public class ExcelFormatCsvWriter : CsvWriter
{
public bool UseExcelFormat
{
get; set;
}
public ExcelFormatCsvWriter(TextWriter writer) : base(writer)
{
}
public override void WriteField(string field, bool shouldQuote)
{
if (shouldQuote && !string.IsNullOrEmpty(field))
{
field = field.Replace(Context.WriterConfiguration.QuoteString, Context.WriterConfiguration.DoubleQuoteString);
}
if (UseExcelFormat && !string.IsNullOrEmpty(field) && field[0] == '0' && field.All(Char.IsDigit))
{
field = "=" + Context.WriterConfiguration.QuoteString + field + Context.WriterConfiguration.QuoteString;
}
else if (shouldQuote)
{
field = Context.WriterConfiguration.Quote + field + Context.WriterConfiguration.Quote;
}
Context.Record.Add(field);
}
}