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

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

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

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

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

你必须实现ToString -method:

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

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

另外,您可以使用WriteLine(c.Name)代替使用WriteLine(c) WriteLine(c.Name)

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

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

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