我有一个类似这样的菜:
public class Dish
{
public Dish(int cost, string name)
{
Cost = cost;
Name = name;
}
public int Cost { get; set; }
public string Name { get; set; }
}
在主窗体中,用户可以输入以前的数据。 然后我创建了一个“Dish”列表:
public static List<Piatto> List = new List<Piatto>();
我是在静态类中创建的,所以我可以从任何地方访问它。 一旦项目被添加到列表中,我想将其保存在文本文件(.txt)中,所以我尝试使用它:
public static void SaveToTxt()
{
using (TextWriter tw = new StreamWriter(Path))
{
foreach (var item in Data.List)
{
tw.WriteLine(item.ToString());
}
}
}
问题是当我打开保存列表的文本文件时,我得到“WindowsFormsApplication1.Dish”。
如何保存到显示费用和名称的文本文件?
P.S。我想将列表保存在一个文本文件中,因为我更容易删除一行,这是我不知道如何用二进制文件做的。
提前致谢。
编辑:
覆盖ToString()
方法运行正常。谢谢大家的答案!
答案 0 :(得分:3)
很简单,你几乎就在那里,我想你忘了覆盖你班级里面的.ToString()
方法了。通过重写.ToString()
方法,您可以返回其对象的字符串表示形式。您也可以格式化它们。因此,您必须添加此覆盖的.ToString()
方法才能使其正常工作。请考虑以下代码
public class Dish
{
public Dish(int cost, string name)
{
Cost = cost;
Name = name;
}
public int Cost { get; set; }
public string Name { get; set; }
public override string ToString()
{
return String.Format("Item Name :{0} \n Item Cost : {1}", this.Name,this.Cost);
}
}
答案 1 :(得分:2)
您的item
是一个包含多个属性的对象,您必须访问它们:
public static void SaveToTxt()
{
using (TextWriter tw = new StreamWriter(Path))
{
foreach (var item in Data.List)
{
tw.WriteLine(string.Format("Item: {0} - Cost: {1}", item.Name, item.Cost.ToString()));
}
}
}
答案 2 :(得分:1)
覆盖ToString()
中的Dish
方法。例如:
public class Dish
{
// rest of code..
public override string ToString()
{
return Cost.ToString() + " " + Name;
}
}
答案 3 :(得分:0)
您需要使用属性,例如:
foreach (var item in Data.List)
{
tw.WriteLine(item.Cost.ToString() + " " + item.Name);
}
答案 4 :(得分:0)
将您的代码更改为此类
public static void SaveToTxt()
{
using (TextWriter tw = new StreamWriter(Path))
{
foreach (var item in Data.List)
{
tw.WriteLine(string.Format("{0} {1}", item.Name, item.Cost));
}
}
}
答案 5 :(得分:0)
您需要覆盖类的ToString
方法,如下所示:
public override string ToString()
{
return string.Format("Name: {0}, Cost: {1}",Name,Cost);
}
答案 6 :(得分:0)
我认为你必须在Dish类中重写ToString方法:
public class Dish
{
public Dish(int cost, string name)
{
Cost = cost;
Name = name;
}
public int Cost { get; set; }
public string Name { get; set; }
public override string ToString()
{
return $"{Name}: {Cost.ToString("c")}";
}
}
答案 7 :(得分:0)
考虑使用XmlSerializer将对象的内容写入XML文件。
https://support.microsoft.com/en-us/help/815813/how-to-serialize-an-object-to-xml-by-using-visual-c
答案 8 :(得分:0)
如果你只想写,没有太多代码更改的最快方法是覆盖你的ToString方法。
public class Dish
{
public Dish(int cost, string name)
{
Cost = cost;
Name = name;
}
public int Cost { get; set; }
public string Name { get; set; }
public override string ToString(){
return "Name: "+Name+" cost: "+cost;
}
}
答案 9 :(得分:0)
将Dish
实例转换为String
时,.Net使用ToString()
方法,默认(即Object.ToString()
)实现返回项目的类型名称:
WindowsFormsApplication1.Dish
您可以提供ToString
的版本:
public class Dish
{
...
public override string ToString()
{
return $"{Cost} {Name}";
}
}
或者将正确的格式放在您将其写入文件的位置(在 Linq - Select
的帮助下):
public static void SaveToTxt() {
// File class allows to get rid of pesky readers and writers
File.WriteAllLines(Path, Data.List.Select(dish => $"{dish.Cost} {dish.Name}"));
}