从List 保存到txt

我希望我的程序从两个文本文件读取到一个ListList是排序和清理重复项。

我希望List保存(排序和清理后)到txt文件。

但是当我查看结果txt文件时,我发现了这条消息:

System.Collections.Generic.List`1 [System.String]

有谁知道如何解决这个错误?

这是我的代码:

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace Uniqpass { class Program { static void Main(string[] args) { String pfad = "C:\\Dokumente und Einstellungen\\Bektas\\Desktop\\test\\"; String pfad2 = "C:\\Dokumente und Einstellungen\\Bektas\\Desktop\\test\\"; String speichern = "C:\\Dokumente und Einstellungen\\Bektas\\Desktop\\test\\ausgabe.txt"; String datei = "text1.txt"; String datei2 = "text2.txt"; try { //Einlesen TxT 1 List pass1 = new List(); StreamReader sr1 = new StreamReader(pfad + datei); while (sr1.Peek() > -1) { pass1.Add(sr1.ReadLine()); } sr1.Close(); //Einlesen TxT 2 StreamReader sr2 = new StreamReader(pfad2 + datei2); while (sr2.Peek() > -1) { pass1.Add(sr2.ReadLine()); } sr2.Close(); List ausgabeListe = pass1.Distinct().ToList(); ausgabeListe.Sort(); ausgabeListe.ForEach(Console.WriteLine); StreamWriter file = new System.IO.StreamWriter(speichern); file.WriteLine(ausgabeListe); file.Close(); } catch (Exception) { Console.WriteLine("Error"); } Console.ReadKey(); } } } 

有一个方便的小方法File.WriteAllLines – 无需自己打开StreamWriter

在.net 4中:

 File.WriteAllLines(speichern, ausgabeListe); 

在.net 3.5中:

 File.WriteAllLines(speichern, ausgabeListe.ToArray()); 

同样,您可以使用File.ReadAllLines替换您的读取逻辑, FileReadAllLines返回一个字符串数组(如果您需要List ,则使用ToList() )。

因此,实际上,您的完整代码可以简化为:

 // Input List data = File.ReadAllLines(pfad + datei) .Concat(File.ReadAllLines(pfad2 + datei2)) .Distinct().ToList(); // Processing data.Sort(); // Output data.ForEach(Console.WriteLine); File.WriteAllLines(speichern, data); 

这行是写入List的ToString表示,导致你得到的文本行:

 StreamWriter file = new System.IO.StreamWriter(speichern); file.WriteLine(ausgabeListe); file.Close(); 

相反,你想写每一行。

 StreamWriter file = new System.IO.StreamWriter(speichern); ausgabeListe.ForEach(file.WriteLine); file.Close(); 

循环遍历列表,单独写下每一行:

 StreamWriter file = new System.IO.StreamWriter(speichern); foreach(string line in ausgabeListe) file.WriteLine(line); file.Close(); 

您正在将列表对象写入文件,因此您可以看到类型名称。

正如您使用ForEach将内容写入控制台一样,您需要遍历ausgabeListe ,为列表中的每个项目调用WriteLine()

 StreamWriter file = new System.IO.StreamWriter(speichern); foreach(string x in ausgabeListe) file.WriteLine(x); file.Close(); 

我使用下面的LINQ将每行写入文本文件。

 var myList=new List { "Hello", "World" }; using (var file = new StreamWriter("myfile.txt")) { myList.ForEach(v=>file.WriteLine(v)); }