如何在FileHelper类中处理SQLDecimal数据类型的空值

kee*_*aar 6 c# filehelpers types

我试图加载使用FileHelpers文件(已经喜欢它,除了这一个问题:P)我有CSV文件数据保存到数据库中,所以我使用的是SQLDECIMAL类型来存储的CSV文件中的十进制值.

[FileHelpers.FieldOptional()]
[FileHelpers.FieldConverter(typeof(SqlDecimalConverter))]
public SqlDecimal Rate;
Run Code Online (Sandbox Code Playgroud)

所有这一切都正常,直到我有一个FixRate1的空值.这标记为错误.

"警告异常:空值发现班上场'率'SWTrade’你必须指定一个FieldNullValueAttribute因为这是一个值类型和不可阻挡的为空."

我试图把[FileHelpers.FieldNullValue(SqlDecimal.Null)],但它显然抛出一个错误.

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

即使我在SqlDecimalConverter类中重写FieldToString方法,在读取数据时也不会调用该函数.

那么,在这种情况下,有没有办法可以为Rate数据分配任何空值或甚至其他一些硬编码值,然后我可以用我自己的逻辑中的null direclty替换它?

如果您需要更多详细信息,请告诉我们.提前致谢.

Mar*_*eli 7

其他评论是正确的你需要使用

private decimal? internalRate;
Run Code Online (Sandbox Code Playgroud)

后来为转换创建了一个属性,实际上该库只自动转换本机类型而SqlDecimal不是一个.

public SqlDecimal? Rate
{
    get 
    {
        if (internalRate.HasValue)
            return new SqlDecimal(internalRate.Value);
        else
            return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

PS:如果你想转到自定义转换器的方式,用它来读取你需要覆盖方法StringToField(调用FieldToString进行写入)

希望这可以帮助 :)


Sap*_*pph 2

我从未使用过 FileHelpers,但你可以尝试:

[FileHelpers.FieldNullValue(null)]
public SqlDecimal? Rate;
Run Code Online (Sandbox Code Playgroud)

当然,除了你的其他属性之外。

请注意这里的巨大变化 - 我添加了一个问号以SqlDecimal使其成为可空类型

然后您可以使用Rate.HasValue来判断它是否为空并Rate.Value访问SqlDecimalifHasValue为 true。

SqlDecimal.Null解析文件后,类似这样的内容将正确使用:

SqlDecimal trueRate = (Rate.HasValue ? Rate.Value : SqlDecimal.Null);
Run Code Online (Sandbox Code Playgroud)

编辑 - 如果您将 Rate 设为可为空 ( SqlDecimal?),您甚至可能不需要“FieldNullValue”属性。再说一次,我对图书馆不熟悉。:(