代码之家  ›  专栏  ›  技术社区  ›  Paulius

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

  •  5
  • Paulius  · 技术社区  · 15 年前

    我正在尝试加载一个csv文件(熟食是';'引号是'“')。

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

    基本上,我有一个整数(system.int32)列。理论上 记录中会有一个 正整数值 在那个专栏里。然而,有时我可能会在该列中遇到一个值“N/A”。我想要实现的是,当文件帮助器在该列中遇到“N/A”时,让它分配一个默认值(-1工作得很好)。

    有人知道这是否可行吗?

    ps:我可能需要对system.datetime字段执行同样的操作(它有时也可能有“n/a”)。

    2 回复  |  直到 12 年前
        1
  •  5
  •   SteveC    13 年前

    想做你想做的事情的最好方法就是使用 FieldConverter 属性设置这些字段,并创建自定义转换器类,这些类为字段指定所需的默认值。

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

    FieldToScript() 方法,检查字符串是否等于“n/a”。如果是,则返回所需的默认值。

    你需要两个不同的类,一个可以处理 Int32 还有一个可以处理的 DateTime .

    FileHelpers文档提供了一个如何执行此操作的示例。 Link

        2
  •  5
  •   Ralph Willgoss    12 年前

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

    // 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();
        }
    
    }
    

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

    推荐文章