将对象列表写入文本文件
Write list of objects to text file
我有一道 class 菜是这样的:
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>();
我在静态 class 中创建了它,因此我可以从任何地方访问它。
一旦一个项目被添加到列表中,我想将它保存在一个文本文件 (.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()
方法效果很好。谢谢大家的回答!
覆盖 Dish
中的 ToString()
方法。例如:
public class Dish
{
// rest of code..
public override string ToString()
{
return Cost.ToString() + " " + Name;
}
}
你需要使用属性,所以像这样:
foreach (var item in Data.List)
{
tw.WriteLine(item.Cost.ToString() + " " + item.Name);
}
将您的代码更改为类似这样的内容
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));
}
}
}
您需要重写 class 的 ToString
方法,如下所示:
public override string ToString()
{
return string.Format("Name: {0}, Cost: {1}",Name,Cost);
}
您的 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()));
}
}
}
我认为你必须重写 Dish 中的 ToString 方法 class:
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")}";
}
}
很简单,你已经差不多了,我想你忘了覆盖 class 中的 .ToString()
方法。通过覆盖 .ToString()
方法,您可以 return 其对象的字符串表示形式。您也可以格式化它们。所以你必须添加这个重写的 .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);
}
}
考虑使用 XmlSerializer 将对象的内容写入 XML 文件。
https://support.microsoft.com/en-us/help/815813/how-to-serialize-an-object-to-xml-by-using-visual-c
如果您只想编写代码,没有太多代码更改的最快方法是覆盖您的 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;
}
}
当将 Dish
实例转换为 String
时,.Net 使用 ToString()
方法默认(即 Object.ToString()
)实现 returns 项的类型名称:
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}"));
}
试试这个:
步骤:
1.Get候选Class对象中的Item列表
2.PassSave方法中的Candidate列表
3.Write 文本文件中的内容**
public class Candidate
{
public string Name{get;set;}
public string Department{get;set;}
}
public void save(List<Candidate>iolist)
{
var dir = @"D:\New folder\log";
string path = System.IO.Path.Combine(dir, "items1213.txt");
File.WriteAllLines(path, iolist.Select(o => o.Name + " " + o.Department));
}
我有一道 class 菜是这样的:
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>();
我在静态 class 中创建了它,因此我可以从任何地方访问它。 一旦一个项目被添加到列表中,我想将它保存在一个文本文件 (.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()
方法效果很好。谢谢大家的回答!
覆盖 Dish
中的 ToString()
方法。例如:
public class Dish
{
// rest of code..
public override string ToString()
{
return Cost.ToString() + " " + Name;
}
}
你需要使用属性,所以像这样:
foreach (var item in Data.List)
{
tw.WriteLine(item.Cost.ToString() + " " + item.Name);
}
将您的代码更改为类似这样的内容
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));
}
}
}
您需要重写 class 的 ToString
方法,如下所示:
public override string ToString()
{
return string.Format("Name: {0}, Cost: {1}",Name,Cost);
}
您的 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()));
}
}
}
我认为你必须重写 Dish 中的 ToString 方法 class:
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")}";
}
}
很简单,你已经差不多了,我想你忘了覆盖 class 中的 .ToString()
方法。通过覆盖 .ToString()
方法,您可以 return 其对象的字符串表示形式。您也可以格式化它们。所以你必须添加这个重写的 .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);
}
}
考虑使用 XmlSerializer 将对象的内容写入 XML 文件。
https://support.microsoft.com/en-us/help/815813/how-to-serialize-an-object-to-xml-by-using-visual-c
如果您只想编写代码,没有太多代码更改的最快方法是覆盖您的 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;
}
}
当将 Dish
实例转换为 String
时,.Net 使用 ToString()
方法默认(即 Object.ToString()
)实现 returns 项的类型名称:
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}"));
}
试试这个:
步骤:
1.Get候选Class对象中的Item列表
2.PassSave方法中的Candidate列表
3.Write 文本文件中的内容**
public class Candidate
{
public string Name{get;set;}
public string Department{get;set;}
}
public void save(List<Candidate>iolist)
{
var dir = @"D:\New folder\log";
string path = System.IO.Path.Combine(dir, "items1213.txt");
File.WriteAllLines(path, iolist.Select(o => o.Name + " " + o.Department));
}