如何在C#中的控制台窗口上显示列表项?

时间:2017-04-08 23:00:34

标签: c#

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

我不明白为什么它不会打印出我放在列表中的数据。我一直在阅读一些帖子,但我似乎无法弄清楚我哪里出错了。如果您能指出正确的方向,我们将非常感谢您的帮助。提前谢谢。

4 个答案:

答案 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);
相关问题