2015-11-11 3 views
1

Я довольно часто использую списки для хранения контента как своего рода базы данных. Я бы создал конкретный класс, который содержит ряд свойств, после чего я бы экспортировал содержимое этого списка во внешний текстовый файл.общий экспорт содержимого списка

Для экспорта я бы использовать что-то вроде:

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

Кто-нибудь есть идеи о том, как решить эту проблему?

спасибо.

+0

Возможный дубликат [Использование отражения в C# для получения свойств вложенного объекта] (http://stackoverflow.com/questions/1954746/using-reflection-in-c-sharp-to-get-properties-of-of- а-вложенный-объект) – Steve

ответ

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

Пожалуйста, обратите внимание, используя отражение может быть довольно медленный. В приведенном выше обзоре есть много возможностей для оптимизации.

Смежные вопросы