c# - 使用 Filehelpers 库忽略小数字段中的美元货币符号 ($)

标签 c# filehelpers

假设我有一个像这样的 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/

相关文章:

c# - 如何从 FileHelpers 库中获取字段的指定固定长度?

c# - FileHelper 转义分隔符

C# If 语句,其中日期是本月

filehelpers - 使用相同的类定义将 FixedLength 格式转换为 csv 的问题

c# - +CDS AT COMMAND 问题

c# - 将 Linq 表达式转换为 sql server 查询

c# - 绑定(bind) winforms datagridview rowheader

c# - MQRC_ 从 iSeries Websphere 消息队列获取消息时出错

c# - Open/Closed Principle - 如何处理这个开关?

c# - 主/细节平面文件与 FileHelpers 在同一行