我有一个名为cEspecie的类
public class cEspecie
{
private string name;
private int lifetime;
private int movility;
private int deadto;
private int type;
public string Name
{
get
{
return name;
}
set
{
name= value;
}
}
public int Type
{
get
{
return type;
}
set
{
type = value;
}
}
public int LifeTime
{
get
{
return lifetime;
}
set
{
lifetime= value;
}
}
public int Movility
{
get
{
return movility;
}
set
{
movility = value;
}
}
public int DeadTo
{
get
{
return deadto;
}
set
{
deadto = value;
}
}
}
我将一些数据存储在名为
的列表中List<cEspecie> list = new List<cEspecie>() {
new cEspecie("Wolf", 100, 10, 0, 0)
new cEspecie("Rabiit", 100, 100, 1, 1),
new cEspecie("Lion", 200, 10, 2, 2),
new cEspecie("Tiger", 300, 10, 3, 3),
};
在我的程序的一个过程中,我使用以下方法将所有数据存储在文本文件中:
using (StreamWriter sr = new StreamWriter(@"../../Archives/TextFilecEspecie.txt"))
{
foreach (var item in list)
{
sr.WriteLine(item.Name);
sr.WriteLine(item.Type);
sr.WriteLine(item.Movility);
sr.WriteLine(item.LifeTime);
sr.WriteLine(item.DeadTo);
}
sr.Close();
}
“TextFilecEspecie.txt”中的结果是:
Wolf
100
10
0
0
Rabiit
100
100
1
1
Lion
200
10
2
2
Tiger
300
10
3
3
现在我真正的,真正的问题是......我怎样才能找回相同的数据来存储在同一个列表中?我正在使用c#和wpf,我真的没有找到答案。
答案 0 :(得分:5)
使用LINQ,以及来自Microsoft优秀Ix-Main package的Buffer
扩展方法。
var species = File.ReadLines("file.txt")
.Buffer(5)
.Select(x => new cEspecie
{
Name = x[0],
Type = int.Parse(x[1]),
Movility = int.Parse(x[2]),
LifeTime = int.Parse(x[3]),
DeadTo = int.Parse(x[4])
});
Buffer(5)
会将每5行分组为一个数组。
答案 1 :(得分:2)
这就是序列化和ISerializable的用途。
Here is a quick tutorial应该让它变得相当简单。
我甚至可能会推荐JSON.Net,它会以JSON格式编写它,以便您可以更轻松地创建/编辑文件中的对象。
答案 2 :(得分:1)
您只能使用StreamReader向后执行同样的操作来读取文件。我不会详细说明,因为我猜你可以使用学习经验,所以考虑到这一点是正确的方向和作业:)
答案 3 :(得分:0)
你可以这样做
var list = new List<cEspecie>();
using (StreamReader reader = File.OpenText(filePath))
{
while(!reader.EndOfStream)
{
string name = reader.ReadLine();
int type = int.Parse(reader.ReadLine());
int movility = int.Parse(reader.ReadLine());
int lifeTime = int.Parse(reader.ReadLine());
int deadTo = int.Parse(reader.ReadLine());
list.Add(new cEspecie(name, type, movility, lifeTime, deadTo));
}
}
请注意:
答案 4 :(得分:0)
var list = File.ReadLines("path").Select(x => new cEspecie(x));
在cEspecie
构造函数中,您可以使用输入行初始化对象。
答案 5 :(得分:0)
这样的事情非常简单,应该可行。但是要做错误检查。
List<cEspecie> list = new List<Persona>();
string[] readText = File.ReadAllLines(@"../../Archives/TextFilecEspecie.txt");
for(int i=0;i<readText.Length/5;i++)
{
list.Add(new Persona(readText[i*5], readText[i*5+1], readText[i*5+2], readText[i*5+3], readText[i*5+4]));
}