列表内容的通用导出

时间:2015-11-11 23:36:39

标签: c# class

我经常使用Lists将内容存储为一种数据库。 我将创建一个包含一系列属性的特定类,然后将该列表的内容导出到外部文本文件。

对于导出,我会使用类似的东西:

string output = string.empty;
for (int i=0; i<myList.count; i++)
{
   output += myList[i].property1 + ";" + myList[i].property2 + ";" + myList[i].property3 + ";" + myList[i].property4 + ";" + myList[i].property5 + Environtment.NewLine;
}

File.WriteAllText(@"c:\mytextfile.txt", output);

这就像魅力一样,唯一的问题是我必须为应用程序中具有特定类的每个列表创建一个导出例程。

我想让这个更通用,因为我想创建一个单一的导出例程,我可以在其中传递List的名称,然后将自动检测List中的参数数量接下来,将所有不同的值导出到具有List名称的文本文件中。

像这样的伪代码:

private void (List selectedList)
{
   for (int i=0; i<selectedList.count; i++)
   {
      output += string.join(";",items) + environment.NewLine;
   }

   File.WriteAllText(filepath + selectedlist + ".txt", output);
}

有人知道如何解决这个问题吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

要获取对象的属性列表,将涉及使用反射。 这有点粗糙,因为我现在不在VS前面,但是如果你传递List<Foo>它会写一个名为Foo.txt的文件

    private const string rootPath = @"C:\Temp\";
    private static void WriteFile<T>(List<T> selectedList)
    {
        var props = typeof(T).GetProperties();
        var sb = new StringBuilder();

        foreach (var item in selectedList) {
            foreach (var prop in props) {
                var val = prop.GetValue(item);
                sb.Append(val);
                sb.Append(";");
            }
        }
        sb.AppendLine();

        var fileName = string.Format("{0}{1}.txt", rootPath, typeof (T).Name);
        File.WriteAllText(fileName, sb.ToString());
    }

请注意使用反射可能会很慢。上面有足够的优化空间。