如何为FileHelpers元素类的字段定义默认值

Pau*_*ius 5 .net c# filehelpers

我正在尝试加载CSV文件(delims是';',引号是''').

我已成功创建了所有内容(向导工具很棒),但有一件事我无法找到解决方案.

基本上,我有一个整数(System.Int32)列.理论上,大多数记录在该列中将具有正整数值.但是,有时我可能会在该列中遇到值"N/A".我想要实现的是,当FileHelpers在该列中遇到"N/A"时,它会分配一个默认值(-1可以正常工作).

有谁知道这是否可能?

PS:我可能需要为System.DateTime字段做同样的事情(有时候它也可能有"N/A").

小智 5

想要做你想做的事情的最好方法是FieldConverter在这些字段上使用属性并创建自定义转换器类,分配你希望字段具有的默认值.

您需要创建一个继承的类,ConverterBase然后为两个虚拟方法提供实现,StringToField()并且FieldToString().

在该FieldToString()方法中,您将检查字符串是否等于"N/A".如果是,则返回所需的默认值.

您将需要两个不同的类,一个可以处理Int32,另一个可以处理DateTime.

FileHelpers文档中有一个如何执行此操作的示例.链接


Mar*_*eli 5

像布兰登说,你需要使用这个转换器

// In your class
[FieldConverter(typeof(NoValueConverter))]
public int Number;

// Te Converter
public class NoValueConverter : ConverterBase
{
    public override object StringToField(string sourceString)
    {
       if (sourceString.Trim().ToUpper() == "N/A")
        return -1; // or int.MinValue;
       else
        return Integer.Parse(sourceString);
    }

    public override string FieldToString(object fieldValue)
    {
        return fieldValue.ToString();
    }

}
Run Code Online (Sandbox Code Playgroud)

我们很高兴您喜欢精灵:)(我们正在开发一个很酷的自动检测功能,以便更容易创建映射类)