将列表中的数据<T>附加到文本文件

问题描述 投票:0回答:2

我正在做一个小家庭项目,以了解有关集合和 FileIO 的更多信息。

我制作了一个小型赛车应用程序,用户输入赛车详细信息,所有这些详细信息都是字符串,这些详细信息被插入到列表中,然后一旦用户单击“保存”按钮,列表的内容就会被提取到文本文件。我已经成功地能够写入文本文件,但是我现在想更改此设置,以便我能够将数据附加到文本文件,而不是每次将数据写入文本文件时都覆盖以前的数据,我是当我使用 AppendAllText() 时遇到困难。

这是我的 People 类如何处理列表数据的输入:

class People
    {
        public string Name { get; set; }
        public string Car { get; set; }
        public string Place { get; set; }
        public List<string> myList = new List<string>();
        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);
        }
    }

这是我的 Form1 类,其 main 方法处理事件并将值发送到 People 类中的列表:

public partial class Form1 : Form
    {
        People person = new People();
        string path = @"C:\Users\Keil\Documents\Visual Studio 2013\Projects\CarRacingArrList\racers.txt";
        public Form1()
        {
            InitializeComponent();          
        }
        private void button1_Click(object sender, EventArgs e)
        {
            person.ShowList();          
        }
        private void button2_Click(object sender, EventArgs e)
        {        
            person.Name = textBox1.Text;
            person.Car = textBox2.Text;
            person.Place = textBox3.Text;
            person.AddToList();
            textBox1.Text = "";
            textBox2.Text = "";
            textBox3.Text = "";
        }
        private void button3_Click(object sender, EventArgs e)
        {
            File.AppendAllText(path, person.myList.OfType<string>().ToString());                    
        }
    }

如您所见,我正在使用 AppendAllText() 方法,其中传递文本文件的路径和列表的内容。当数据写入文本文件时,它会将其附加到末尾:System.Linq.Enumerable+d__aa`1[System.String] 而不是存储到 myList 中的实际数据。

看起来返回的是对象类型而不是实际数据

我的代码中是否缺少某些内容?

c# file-io collections
2个回答
5
投票

请勿在

ToString
之后致电
OfType
。使用
string.Join
连接所有行。

File.AppendAllText(path, string.Join(Environment.NewLine, person.myList));

或者直接使用

File.AppendAllLines

File.AppendAllLines(path, person.myList);

我还删除了

OfType
调用,因为它是多余的,你已经有一个
List<string>


0
投票

你尝试过吗:

File.AppendAllLines();

File.AppendAllLines(path, person.myList.OfType<string>());
© www.soinside.com 2019 - 2024. All rights reserved.