列表内容的一般导出
本文关键字:列表 | 更新日期: 2023-09-27 18:21:44
我经常使用列表将内容存储为一种数据库。我将创建一个包含一系列属性的特定类,然后将该列表的内容导出到外部文本文件。
对于出口,我会使用类似的东西:
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);
这就像一个魅力,唯一的问题是我必须为应用程序中具有特定类的每个列表创建一个导出例程。
我想让它更通用一点,因为我想创建一个单独的导出例程,在这个例程中,我可以传递列表的名称,然后它将自动检测列表中的参数数量,然后,将所有不同的值导出到具有列表名称的文本文件中。
类似这样的伪代码:
private void (List selectedList)
{
for (int i=0; i<selectedList.count; i++)
{
output += string.join(";",items) + environment.NewLine;
}
File.WriteAllText(filepath + selectedlist + ".txt", output);
}
有人知道如何解决这个问题吗?
谢谢。
要获得对象的属性列表,需要使用反射。这有点粗糙,因为我现在不在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());
}
请注意,使用反射可能非常缓慢。以上内容有很大的优化空间。