2013-09-16 42 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

它根本不起作用。我很困惑,爲什麼,這就是我發佈這個問題的原因。我通過在file.Close()之前插入一個file.WriteLine(「Hello」)來測試它,並且當我運行程序並檢查文件時,它將在其中包含「Hello」 – user2453973

+1

您確定實際上有你的收藏?如果你一步一步,它是否進入file.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.Close前file.WriteLine(「你好」)()測試它,當我運行該程序,並檢查文件都將在它是「你好」

這實際上聽起來就像你寫出你的收藏而不添加項目。如果集合爲空,上面的代碼(和您的)將創建一個空文件輸出,因爲沒有Account實例要寫出。

+0

我會試試這個! – user2453973

+0

謝謝,得到了成功添加到集合中的項目,並且在我重載toString()之後,它與原始代碼一起工作。謝謝。 – user2453973