我一直在学习C#中的集合命名空间,所以一直在做一些自制项目来学习。
我制作了一个赛车应用程序,您可以在其中输入赛车的名称,车辆和位置,然后将其存储在阵列列表中。我可以将我的数组列表的内容提取到控制台窗口,但我想知道如何编写并将其保存到文本文件(有点像迷你数据库)。
我知道存储在数组列表中的每个元素都存储为一个对象,因此需要进行转换才能将它们提取到适当的类型。
以下是我的数组列表处理输入的方式:
class People
{
public string Name { get; set; }
public string Car { get; set; }
public string Place { get; set; }
public ArrayList myList = new ArrayList();
public void ShowList()
{
for (int i = 0; i < myList.Count; i++)
{
Console.WriteLine("" + myList[i] + "\n|");
}
}
public void AddToList()
{
myList.Add("Name: " + Name + " Car: " + Car + " Place: " + Place);
}
}
以下是我尝试将myList保存到文本文件的方法:
private void button3_Click(object sender, EventArgs e)
{
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\Keil\Documents\Visual Studio 2013\Projects\CarRacingArrList\racers.txt"))
{
file.WriteLine(person.myList.ToString());
}
}
我添加了ToString()方法,将myList中的所有元素都转换为字符串。
我进入文本文件的输出是:System.Collections.ArrayList
是无效投射的结果还是我错过的东西?
三江源
答案 0 :(得分:2)
你可以做到:
file.WriteLine(string.Join(Environment.NewLine, myList.OfType<string>()));
或没有StreamWriter
:
private void button3_Click(object sender, EventArgs e)
{
File.WriteAllLines("path", myList.OfType<string>());
}
在ToString
上调用ArrayList
会为您提供类型名称,因为这是ToString
的默认行为,如果类型未覆盖ToString
方法,则类型名称默认返回。
除此之外,请不要使用ArrayList
,请使用通用List<T>
进行类型安全和许多其他好处......
答案 1 :(得分:0)
你需要循环遍历数组的所有项目才能全部写出来:
using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\Users\Keil\Documents\Visual Studio 2013\Projects\CarRacingArrList\racers.txt"))
{
foreach(var item in myList)
file.WriteLine(var.ToString());
}