如何将对象列表只写到文本文件中的属性?

问题描述 投票:0回答:1

我想把我的列表写到一个txt文件中。但是,我的列表对象项目并没有添加属性,而是在每个属性前添加了动物名称,动物编号等。它还在每个属性前面添加ToString()文本。

我如何防止这种情况发生?我知道我可以使用txt.Write(animal.Name, animal.Number等),但是我不能简单地排除ToString值吗?

public void Save(string fileName)
        {
            Txt = new StreamWriter(@"path" + fileName);
            foreach(Animal animals in Animals)
            {
                Txt.Write(animals + "\n");
            }
            Txt.Close();
        }

这是我的ToString()。

        public override ToString()
{
            string info = "Animal ID: " + ChipRegistrationNumber
                          + "\nAnimal Birthdate: " + DateOfBirth
                          + "\nAnimal Name: " + Name
                          + "\nAnimal Status: " + IsReservedString
                          + "\nAnimal Gender: " + Gender;

            return info;
}

目前在我的文本文件中的输出是:

Animal ID: 0
Animal Birthdate: 10-12-1999
Animal Name: Snoopy
Animal Status: Not reserved
Animal Gender: Male
Days since last walk: 34
Dog Price: €200,00

所以我只是想要列表中的对象数据,而不是ToString。

c# file-io
1个回答
1
投票

你可以添加另一个方法 ToShortString():

 public string ToShortString()
{
            string info = ChipRegistrationNumber + DateOfBirth + Name + IsReservedString + Gender;
            return info;
}

那么你可以在你的循环中调用这个方法。

foreach(Animal animals in Animals)
            {
                Txt.Write(animals.ToShortString() + "\n");
            }

如果你的属性是 Animal 经常换班,你也可以使用反思。但这样会降低你的表现。

public string ToShortString()
{
            PropertyInfo[] properties = GetType().GetProperties();
            StringBuilder result = new StringBuilder();
            foreach(var prop in properties)
            {
                result.Append(prop.GetValue(this));
            }
            return result.ToString();
}
© www.soinside.com 2019 - 2024. All rights reserved.