首页 > 解决方案 > 将存储在类列表中的信息打印到控制台

问题描述

我是 C# 初学者,我正在尝试学习一般的编码基础知识,因为我是新手。我一直在看一些教程,并决定开始编写一个简单的代码,并在我了解更多时改进/添加更多能力。

目前我正在创建一个简单的数据库,我可以在其中存储一些关于人的信息。我决定尝试为此使用类,但在打印存储在列表中的数据时遇到了问题。

我试过Console.WriteLine(people.ToString());了,但没有用。

我试图合并string.Join(delimiter, list.Select(i => i.Boo).ToArray())我在另一篇文章中找到的内容,但没有这样做。

class Program
{
    static void Main(string[] args)
    {
        List<Person> people = new List<Person>();

        Console.Write("How many people are to be stored?: ");

        int personCount = Convert.ToInt32(Console.ReadLine());

        for (int i=1; i<=personCount; i++)
        {
            Console.Write("Name of person "+ i + ":");
            string nameInput=Console.ReadLine();
            Console.Write("Age of "+ nameInput +": ");
            int ageInput= Convert.ToInt32(Console.ReadLine());
            Console.Write("Height of " + nameInput + ": ");
            double heightInput = Convert.ToDouble (Console.ReadLine());
            people.Add(new Person(nameInput, ageInput, heightInput));
        }

        // here goes (i think) the code to type info stored in list

        Console.WriteLine("Press ENTER to close.");

        Console.ReadLine();
    }
}
class Person
{
    public string name;
    public int age;
    public double height;

    public Person(string name, int age, double height)
    {
        this.name = name;
        this.age = age;
        this.height = height;
    }
}

我想要一个信息列表,但我只得到以下信息:

System.Collections.Generic.List1[研究.人]`

任何帮助将不胜感激。

标签: c#console

解决方案


您需要覆盖类中的ToString方法Person并在那里处理输出。

Object.ToString 方法返回:

表示当前对象的字符串。

这基本上是您的对象(人)的字符串表示形式。默认情况下,它将返回完整的类名,包括命名空间。当你将一个像人这样的对象传递给Console.WriteLine(它需要一个string作为参数)时,它会自动调用ToString框架中每个对象继承自的方法Object。这应该解释您的输出:

System.Collections.Generic.List

当你使用Console.WriteLine(people.ToString());. 它调用继承自的ToString方法并打印全名。ListObject

如果您在课堂上覆盖它,它将采用您的版本,您可以确定输出的外观

class Person
{
    public string name;
    public int age;
    public double height;

    public Person(string name, int age, double height)
    {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public override string ToString()
    {
        return $"Name: {name} Age: {age} Height: {height}";
    }
}

现在你可以使用string.Join

Console.WriteLine(String.Join(Environment.NewLine, people));

推荐阅读