为什么将项目写入控制台只写入命名空间和类名而不是数据?

Gus*_*sto 4 c#

对于大多数人(熟练的程序员)来说,标题听起来不太好,但我正在学习C#基础知识的第3周,我无法弄清楚如何解决下一个任务.我将为一堆城市存储一些温度,首先向用户询问cityName,然后询问该城市的实际温度.所有这些东西都应保存在列表<>中,我将使用Class和Constructor.当我尝试打印出结果(使用foreach)时,它打印出我的命名空间的名称和我的类的名称,如"Task_5.City"我的代码错误:

public class City //class
{
    public string CityName { get; set; }
    public int Temperature { get; set; }

    public City(string name, int temp)//konstruktor 
    {
        this.CityName = name;
        this.Temperature = temp;
    }

}

class Program
{
    static void Main(string[] args)
    {
        var cityList = new List<City>(); 

        Console.WriteLine("What is your city?");
        string cityName = Console.ReadLine();
        Console.WriteLine("What temperature for this city?");
        int temp = Convert.ToInt32(Console.ReadLine());

        City myCity = new City(cityName, temp);
        cityList.Add(myCity);


        foreach (var item in cityList)
        {
            Console.WriteLine(item);
        }

        Console.ReadLine();

    }
}
Run Code Online (Sandbox Code Playgroud)

art*_*dev 7

您将对象传递给Console.WriteLine(item)而不是传递字符串.Console.WriteLine调用ToString()该对象的方法,默认情况下返回名称空间+类名.您可以像下一样覆盖此行为:

    public class City //class
    {
        public string CityName { get; set; }
        public int Temperature { get; set; }

        public City(string name, int temp)//konstruktor 
        {
            this.CityName = name;
            this.Temperature = temp;
        }

        public override string ToString()
        {
            return string.Format("{0} {1}", CityName, Temperature);
        }

    }
Run Code Online (Sandbox Code Playgroud)

或者您可以使用另一种重载WriteLine方法:

Console.WriteLine("{0} {1}", item.CityName, item.Temperature);
Run Code Online (Sandbox Code Playgroud)