using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
public static void Main(string[] args)
{
IList<PersonalDetails> EmpData = new List<PersonalDetails>()
{
new PersonalDetails(){ firstName="Alan", lastName="Al", age=25},
new PersonalDetails(){ firstName="Brian", lastName="Br", age=30},
new PersonalDetails(){ firstName="Carlie", lastName="Ca", age=35},
new PersonalDetails(){ firstName="David", lastName="Da", age=40},
new PersonalDetails(){ firstName="Eddie", lastName="Ed", age=45}
};
foreach (PersonalDetails i in EmpData) {
Console.WriteLine(i);
}
}
}
public class PersonalDetails
{
public string firstName { get; set; }
public string lastName { get; set; }
public int age { get; set; }
}
}
此程序打印出来
ConesoleApp1.PersonalDetails
ConesoleApp1.PersonalDetails
ConesoleApp1.PersonalDetails
ConesoleApp1.PersonalDetails
ConesoleApp1.PersonalDetails
我不明白为什么它不会打印出我放在列表中的数据。我一直在阅读一些帖子,但我似乎无法弄清楚我哪里出错了。如果您能指出正确的方向,我们将非常感谢您的帮助。提前谢谢。
答案 0 :(得分:1)
您需要覆盖ToString
上的PersonalDetails
方法,否则将调用默认的ToString
实现,并打印出类型名称。
将此方法添加到您的班级:
public override string ToString()
{
return $"{firstName} {lastName}, {age}";
}
您可以根据需要更改格式。
答案 1 :(得分:1)
类的默认字符串表示形式是该类的名称。这是因为.NET 不知道如何打印PersonDetails
。不过,您可以告诉它by overriding .ToString()
:
public override string ToString()
{
return string.Format("{0} {1} - {2}", firstName, lastName, age);
// or however you want to print the values
}
答案 2 :(得分:1)
Console.WriteLine(i)
与Console.WriteLine(i.ToString())
相同。因为您没有自己的ToString实现,所以它使用Object
的默认值。
要解决此问题,您需要覆盖Object.ToString()
。
public override string ToString()
{
return $"{this.firstName}, {this.lastName}, {age.ToString()}";
}
返回第一个对象Alan, Al, 25
答案 3 :(得分:1)
正如其他人已经提到的那样,您需要指定ToString方法来覆盖它的默认实现。
在某些情况下,特别是在处理动态对象时,通过使用JSON序列化程序(例如Newtonsoft JSON)将其序列化来获取对象字符串表示是有帮助的:
var objectString = JsonConvert.SerializeObject(myInstance, Formatting.Indented);