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