文本文件中的对象列表

时间:2014-02-21 13:41:34

标签: c# list text-files

经过大量的正则表达式清理(非常感谢!),我现在拥有一个代码,该代码采用特定的文本文件,清除所有垃圾和奇怪的格式,并产生以下结果:

...
NAME:John Smith
TITILE:Mr
BUILDING:A
NAME:Jane Smith
TITLE:Miss
BUILDING:CX
...

为数千名员工。

我还有一个拥有属性的类Employee - 你猜对了 - 名字,标题和建筑。

现在我逐行解析文件并使用“PROPERTY:”之后的相关文本创建Employee的新实例,然后我将其添加到列表中,但我无法摆脱这种完美的感觉文本输入和类描述之间的匹配可以使自己成为一个c#magic来获取我的文本并创建一个优雅的单行(甚至10行)的Employee对象列表。有什么建议或指示吗?

1 个答案:

答案 0 :(得分:0)

如果你真的想让它更通用,我会做以下事情:

当您阅读每个属性时,请使用反射来查找类

中的值
Employee e = new Employee();
PropertyInfo property = typeof(Employee).GetProperty(strProperty);
property.SetValue(e, propertyValue);

现在,如果您在阅读的文件的每一行上都反映出类,那么这可能会变得非常昂贵,但是您可以通过构建字典来保持您的属性的开头:

Dictionary<string, PropertyInfo> properties = new Dictionary<string, PropertyInfo>();

for each (PropertyInfo p in typeof(Employee).GetProperties)
    properties.Add(p.Name, p);

然后,当您循环浏览文件时,只需拨打:

Employee e = new Employee();

properties[strProperty].SetValue(e, propertyValue);

Dapper(这里使用的对象映射器,我相信)以类似的方式工作。

修改

如果你有公共字段和属性,你也必须循环遍历它们:

Dictionary<string, FieldInfo> fields = new Dictionary<string, FieldInfo>();

for each (FieldInfo f in typeof(Employee).GetFields)
    fields.Add(f.Name, f);

另外,如果要限制或扩展索引属性/字段的范围,或包含子类的属性和字段,请使用GetProperties / GetFields(BindingFlags)