假设我有一个像这样的Filehelpers类:
[DelimitedRecord(",")]
public class SomeRecord
{
public string Field1;
public decimal Field2;
}
如果我尝试导入这样的CSV记录:
hello,$4.00
我收到FileHelpers.ConvertException
:“错误转换'$ 4.00'到类型:'十进制'。”
如何让Filehelpers忽略$ sign?
答案 0 :(得分:5)
我认为您需要编写自己的转换器并将该转换器用于Field2
。这并不困难,您需要做的就是创建一个扩展ConverterBase
的类。例如:
public class CurrencyConverter : ConverterBase
{
private NumberFormatInfo nfi = new NumberFormatInfo();
public CurrencyConverter()
{
nfi.NegativeSign = "-";
nfi.NumberDecimalSeparator = ".";
nfi.NumberGroupSeparator = ",";
nfi.CurrencySymbol = "$";
}
public override object StringToField(string from)
{
return decimal.Parse(from, NumberStyles.Currency, nfi);
}
}
然后,您可以在Field2
媒体资源上使用该转换器:
[DelimitedRecord(",")]
public class SomeRecord
{
public string Field1;
[FieldConverter(typeof(CurrencyConverter))]
public decimal Field2;
}
,$ 4.00将被解析为4.00。
很明显,我上面的代码并不那么强大。您可能更愿意使用TryParse
而不仅仅是Parse
并返回0
如果失败但您明白了。