从List <T>保存到txt

Jon*_*ylo 27 c# save generic-list

我希望我的程序从两个文本文件中读取一个List<T>.的List<T>被分类和清洗重复.

我希望List<T>将(在排序和清理之后)保存到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<String> pass1 = new List<String>();
                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<String> 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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Hei*_*nzi 70

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

在.net 4中:

File.WriteAllLines(speichern, ausgabeListe);
Run Code Online (Sandbox Code Playgroud)

在.net 3.5中:

File.WriteAllLines(speichern, ausgabeListe.ToArray());
Run Code Online (Sandbox Code Playgroud)

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

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

// Input
List<String> data = File.ReadAllLines(pfad + datei)
    .Concat(File.ReadAllLines(pfad2 + datei2))
    .Distinct().ToList();

// Processing
data.Sort(); 

// Output
data.ForEach(Console.WriteLine); 
File.WriteAllLines(speichern, data);
Run Code Online (Sandbox Code Playgroud)

  • 这个答案很棒,因为它可能会将几行代码减少到一行. (2认同)

Mat*_*ten 10

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

StreamWriter file = new System.IO.StreamWriter(speichern);
file.WriteLine(ausgabeListe);
file.Close();
Run Code Online (Sandbox Code Playgroud)

相反,你想写每一行.

StreamWriter file = new System.IO.StreamWriter(speichern);
ausgabeListe.ForEach(file.WriteLine);
file.Close();
Run Code Online (Sandbox Code Playgroud)