将对象列表保存到文本文件
本文关键字:文本 文件 保存 对象 列表 | 更新日期: 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();