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

时间:2015-12-15 14:58:30

标签: c#

您好我试图将对象列表保存到文本文件中。以下是我正在使用的代码。

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

" BMW | 6系列| 2007 | 10900 | 17000 |敞篷车|自动|汽油|"。

显示:" 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();

    }

3 个答案:

答案 0 :(得分:6)

您必须实施ToString - 方法:

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

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

替代使用WriteLine(c),您可以简单地使用WriteLine(c.Name)

您当前看到的内容(“Car_Manager.Car”)是默认实现,它在每个类中继承,因为它在对象类上实现。所以你可以简单地用给定的状态,ents和你完成它来覆盖它。

答案 1 :(得分:1)

您需要覆盖ToString()方法或编写新方法以分别写出每个属性值。

e.g。

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序列化非常适合这种情况。

答案 2 :(得分:0)

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

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