【问题标题】:FileIO from ArrayList来自 ArrayList 的 FileIO
【发布时间】:2014-09-11 17:20:28
【问题描述】:

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

是无效转换的结果还是我错过了什么?

谢谢

【问题讨论】:

  • 您需要分别编写每个元素。顺便说一句,请改用generic collections(在.NET 2.0 中引入)或ArrayList。您会发现很少需要使用ArrayList 来存储对象列表。
  • 此外,如果此代码的目的是将数据持久保存到磁盘以便您稍后可以将其加载回来,请查看 .NET 中的 various serialization alternatives(例如 XmlSerializerDataContractSerializer),因为它将解决您需要手动解决的许多问题。
  • 附带说明:您可能想弄清楚如何创建一个 person 类,以便在 People 类中只有一个 List&lt;Person&gt; PeopleList&lt;Person&gt;。原因是名称、汽车和地点似乎都是一个人的属性。

标签: c# file-io collections arraylist


【解决方案1】:

你可以这样做:

file.WriteLine(string.Join(Environment.NewLine, myList.OfType<string>()));

或者没有StreamWriter:

private void button3_Click(object sender, EventArgs e)
{
   File.WriteAllLines("path", myList.OfType<string>());
}

ArrayList 上调用ToString 会为您提供类型名称,因为这是ToString 的默认行为,如果类型没有覆盖ToString 方法,则默认返回类型名称。

除此之外,不要使用ArrayList,使用通用List&lt;T&gt; 以获得类型安全和许多其他好处...

【讨论】:

    【解决方案2】:

    您需要循环遍历数组的所有项来将它们全部写入:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多