2013-09-16 4 views
1

Каков наилучший способ записи наблюдаемой коллекции в txt-файл? В настоящее время у меня есть следующее:Как написать наблюдаемую коллекцию в txt-файл?

public ObservableCollection<Account> SavedActionList = new ObservableCollection<Account>(); 
using (System.IO.StreamWriter file = new System.IO.StreamWriter("SavedAccounts.txt")) 
     { 
      foreach (Account item in SavedActionList) 
      { 
       file.WriteLine(item.ToString()); //doesn't work 
      } 
      file.Close(); 
     } 

Я не уверен, почему он не будет писать в файл. Есть идеи?

+0

Это должно создать некоторый результат - когда вы говорите «не работает», что по-другому или неверно по сравнению с вашими ожиданиями? –

+0

Это просто не работает. Я действительно смущен, почему, поэтому я разместил вопрос. Я протестировал его, вставив файл .WriteLine («Hello») перед файлом.Close(), и когда я запустил программу и проверил файл, все, что у нее будет, это «Привет» – user2453973

+1

Вы уверены, что на самом деле есть предметы в вашей коллекции? Если вы переходите, делает ли это когда-либо шаг в файл. Шаг WriteLine? Это будет пропущено, если нет предметов, которые он собирает ... –

ответ

3

Вы можете легко просто написать:

File.WriteAllLines("SavedAccounts.txt", SavedActionList.Select(item => item.ToString())); 

Однако это потребует вашего Account класс, чтобы переопределить ToString предоставить информацию, которую вы хотите записать в файл.

Если вы не перекрытый ToString, я рекомендую сделать способ справиться с этим:

string AccountToLine(Account account) 
{ 
    // Convert account into a 1 line string, and return 
} 

С этим, вы могли бы написать:

File.WriteAllLines("SavedAccounts.txt", SavedActionList.Select(AccountToLine)); 

Редактировать в ответ на комментарии:

Это просто не работает. Я действительно смущен, почему, поэтому я разместил вопрос. Я тестировал его, вставив file.WriteLine («Hello») перед file.close(), и когда я запустить программу и проверить файл все это будет иметь в нем «Привет»

Это на самом деле звучит как вы пишете свою коллекцию, не добавляя в нее элементы. Если коллекция пуста, вышеуказанный код (и ваш) создаст пустой файл вывода, так как нет никаких Account экземпляров для записи.

+0

Я попробую! – user2453973

+0

Спасибо, получили элементы, успешно добавленные в коллекцию, и он работал с исходным кодом после того, как я перегрузил toString(). Благодарю. – user2453973

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