假设我有一个像这样的 Filehelpers 类:
[DelimitedRecord(",")]
public class SomeRecord
{
public string Field1;
public decimal Field2;
}
如果我尝试导入这样的 CSV 记录:
hello,$4.00
我收到 FileHelpers.ConvertException
:“将 '$4.00' 转换为类型时出错:'十进制'。”
如何让 Filehelpers 忽略 $ 符号?
最佳答案
我认为您需要编写自己的转换器并将该转换器用于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
,但您明白了。
关于c# - 使用 Filehelpers 库忽略小数字段中的美元货币符号 ($),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25283510/