将对象列表保存到文本文件

本文关键字:文本 文件 保存 对象 列表 | 更新日期: 2023-09-27 18:26:56

你好,我正在尝试将对象列表保存到文本文件中。下面是我使用的代码。

我遇到的问题是,不是为每个项目显示一个字符串,比如:

"宝马|6系|2007 |10900|117000|敞篷车|自动|汽油车|"。

列表中的每个项目都显示:"Car_Manager.Car"。谢谢你的帮助。

    private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
    {
        // Save everything in a dialog box
        saveFileDialog1.ShowDialog();
        // Open the file and save the information
        Stream textOut = saveFileDialog1.OpenFile();
        StreamWriter writer = new StreamWriter(textOut);
     foreach(Car c in cars)
        {
            writer.WriteLine(c);
        }
            writer.Close();
    }

将对象列表保存到文本文件

您必须实现ToString-方法:

class Car 
{
    public override string ToString() 
    {
        return this.Name;  // or whatever property you need for your car-models
    }
}

这为列表中的每辆车提供了一个字符串表示,然后由WriteLine()使用。

或者,您可以简单地使用WriteLine(c.Name),而不是使用WriteLine(c)

您当前看到的("Car_Manager.Car")是默认实现,它在对象类上实现时由每个类继承。因此,你可以简单地用给定的状态覆盖它,然后你就完成了。

您需要重写ToString()方法或编写一个新方法来分别写出每个属性值。

例如

public string ToDelimitedString()
{
    StringBuilder result = new StringBuilder();
    result.Append(String.Format("{0}|{1}|{2}", this.Make, this.Model, this.Year));
    return result.ToString();
}

foreach(Car c in cars)
{
    writer.WriteLine(c.ToDelimitedString());
}

默认情况下,对象通过其ToString方法转换为字符串,该方法默认返回对象类型名称。

出于兴趣,为什么要将它们写入文本文件?Xml序列化非常适合这种情况。

作为替代方案,您可以使用扩展方法。类似于下面的东西。

public static class CarExtensionMethods {
    public static string TextFileString(this Car car) {
        return string.format("{0}|{1}|{2}", car.Make, car.Model, car.Year);
    }
}

然后使用以下

var carString = car.TextFileString();