c# - 如何将对象列表保存到文本文件中

时间:2017-06-22 09:30:35

标签: c# winforms visual-studio

我有一个简单的Windows窗体应用程序。基本上,我想保存用户输入的ID号和名称。我有一个Person类:

class Person
{
    private string nric;
    private string name;

    public Person(string nric, string name)
    {
        this.nric = nric;
        this.name = name;
    }

和.cs文件:

    private void save_Click(object sender, EventArgs e)
    {
        List<Person> pList = new List<Person>();
        Person p1 = new Person(nric.Text, name.Text);
        pList.Add(p1);

        using (TextWriter tw = new StreamWriter("PersonFile.txt"))
        {
            foreach (Person p in pList)
            {
                tw.WriteLine(p);
            }
            tw.Close();
        }
    }

当我尝试运行代码时,这是PersonFile.txt中显示的输出:

   Testing.Person

如何使ID号和名称显示在文本文件中?

5 个答案:

答案 0 :(得分:7)

添加&#34; ToString&#34;方法

class Person
{
    private string nric;
    private string name;

    public Person(string nric, string name)
    {
        this.nric = nric;
        this.name = name;
    }

    public override string ToString()
    {
       return $"{nric} {name}";
    }
}

答案 1 :(得分:1)

该行

 tw.WriteLine(p);

只需调用p.ToString()并将返回的字符串写入您的文件。 ToString()的默认实现返回对象类型的名称。

解决问题的一种方法是覆盖ToString()

class Person
{
    private string nric;
    private string name;

    public Person(string nric, string name)
    {
        this.nric = nric;
        this.name = name;
    }

    public override string ToString()
    {
        return $"{nric} {name}";
    }
}

如果您确实希望以稍后再次加载列表的方式保存列表,则可能需要阅读serialization。有很简单的方法来存储和加载不同格式的对象(如xml,二进制等)。

答案 2 :(得分:0)

覆盖类

的toString()
class Person
{
    private string nric;
    private string name;

    public override string ToString()
    {
       return name + " " + nric;
    }
}

然后(不需要创建StreamWriter):

File.WriteAllLines("PersonFile.txt", pList);

答案 3 :(得分:0)

您只需打印对象的类型。

试试这个:

Tw.WriteLine($"Id: {p.nric}, Name: {p.name}");

答案 4 :(得分:0)

您可以将功能添加到Person

public string getPerson()
{
    return this.nric + " "+ thisname;
}

并更改

tw.WriteLine(p);

call tw.WriteLine(p.getPerson());