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

时间:2010-01-05 15:32:10

标签: c# .net filehelpers

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

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

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

有人知道这是否可行?

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

2 个答案:

答案 0 :(得分:5)

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

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

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

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

FileHelpers文档中有一个如何执行此操作的示例。 Link

答案 1 :(得分: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();
    }

}

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