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