将对象列表保存到文本文件
您好我试图将对象列表保存到文本文件中。 以下是我正在使用的代码。
我遇到的问题是,而不是为每个项目显示一个字符串,如:
“宝马| 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();