ArrayList中的FileIO

时间:2014-07-21 08:55:03

标签: c# file-io collections arraylist

我一直在学习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

是无效投射的结果还是我错过的东西?

三江源

2 个答案:

答案 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());
}