我想把我的列表写到一个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。
你可以添加另一个方法 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();
}