我是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.List
1 [Studies.Person]`
任何帮助将不胜感激。
答案 0 :(得分:1)
您需要覆盖Person
类中的ToString方法并在那里处理输出。
Object.ToString方法返回:
代表当前对象的字符串。
这基本上是对象(人)的字符串表示形式。默认情况下,它将返回完整的类名,包括名称空间。当您将像人这样的对象传递给Console.WriteLine
(期望使用string
作为参数)时,它将自动调用ToString
方法,框架中的每个对象都继承自Object
。这应该可以解释您的输出:
System.Collections.Generic.List
使用Console.WriteLine(people.ToString());
时。它调用了ToString
从List
继承并打印全名的Object
方法。
如果您在类中覆盖它,它将采用您的版本,您可以确定输出的外观
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));
答案 1 :(得分:0)
问题是从ToString()
(每个继承层次结构的根)继承的object
的默认实现是打印类型名称。要使其正常工作,您必须覆盖ToString()
并让其执行一些有用的操作
例如,在课堂上写人
public override string ToString()
{
return $"Person {name}, aged by (age}, height = {height}";
}
请注意,此方法已被int
,double
或DateTime
之类的其他类型覆盖。但是,由于系统不知道人(或任何其他用户定义的类型)的有意义的字符串表示形式应该如何,因此它不提供此类替代。
答案 2 :(得分:0)
两个问题:
您正在调用列表中的.ToString(),而不是单个Person
您列表中的对象。所以你告诉机器是“告诉
我关于此列表,而不是其中的对象”
回复“这是Person对象的列表”。
您的Person类没有.ToString()方法重写,因此当 您调用.ToString()。
因此,您需要在Person类中重写.ToString()方法,并遍历列表并为每个Person对象调用.ToString()。