【发布时间】:2010-10-18 07:51:16
【问题描述】:
假设您有一个具有以下简化结构的 CSV 文件
LINE1: ID,Description,Value
LINE2: 1,Product1,2
LINE3: ,,3
LINE4: ,,4
LINE5: 2,Product2,2
LINE6: ,,3
LINE7: ,,5
我正在使用 FileHelpers 读取 CSV,并连接了一个接口,允许我在读取当前行后访问它。有关更多背景信息,请参阅此SO question。
问题在于,使用这种方法我需要编写更多 if 语句来检查所有需要复制的字段。 (我目前至少有 6 个具有相同“空白”格式的 csv 文件,它们都有 20 多个需要复制的字段 ~ 120 if 语句。urggh)
现在这不是一个微优化练习,因为会有更多的文件具有这种“不完整”的格式。
如何以优雅的方式更新之前的记录,这样我就不必为每个字段编写 if 条件和声明?
【问题讨论】:
-
有一个需要复制的字段列表,并为列表中的每个字段执行您所做的操作。除非 FH 提供一种以文本方式访问字段的方法,否则您必须使用反射。
-
@jaroslav - 见下文......这是否与您所指的内容一致。
-
这是一种方法。不过,我会缓存结果,因此您不必每次读取记录时都生成字段列表(将列表保存在内部集合中)。
-
@jaroslav - 好主意,静态收集有用吗?
-
当然,只要确保它是线程安全的,因为您可以在同一个应用程序域中读取多个 CSV。您也可以将其缓存在您从 CSV 解析出来的类的静态构造函数中,然后使用
Product.GetCopyFields()方法或您命名它来请求字段列表。