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

C# 为什么将项写入控制台只写入命名空间和类名而不写入数据?,c#,C#,也许对你们大多数人(熟练的程序员)来说,这个标题听起来不是很好,但我正在学习C#basicals的第三周,我不知道如何解决下一个任务。 我将存储一些城市的温度,首先向用户询问城市名称,然后询问该城市的实际温度。所有这些东西都应该保存在一个列表中,我将使用类和构造函数。 当我尝试打印出结果(使用foreach)时,它会打印出名称空间的名称和类的名称,如“Task_5.City” 我的代码有什么问题: public class City //class { public string Cit

也许对你们大多数人(熟练的程序员)来说,这个标题听起来不是很好,但我正在学习C#basicals的第三周,我不知道如何解决下一个任务。 我将存储一些城市的温度,首先向用户询问城市名称,然后询问该城市的实际温度。所有这些东西都应该保存在一个列表中,我将使用类和构造函数。 当我尝试打印出结果(使用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();

    }
}
公共类城市//类
{
公共字符串CityName{get;set;}
公共int温度{get;set;}
公共城市(字符串名称,int-temp)//konstruktor
{
this.CityName=名称;
这个。温度=温度;
}
}
班级计划
{
静态void Main(字符串[]参数)
{
var cityList=新列表();
你的城市是什么;
字符串cityName=Console.ReadLine();
控制台。WriteLine(“这个城市的温度是多少?”);
int temp=Convert.ToInt32(Console.ReadLine());
城市myCity=新城市(城市名称,临时);
城市列表。添加(myCity);
foreach(cityList中的变量项)
{
控制台写入线(项目);
}
Console.ReadLine();
}
}

更改
控制台写入线(项目)城市
对象的内容,请将code>添加到以下选项之一

Console.WriteLine("City: " + item.CityName + " has a temperature of " + item.Temperature + " degrees.");
或者,如果愿意,可以使用
string.Format

Console.WriteLine(string.Format("City: {0} has a temperature of {1} degrees.", item.CityName, item.Temperature));

您正在使用此重载的
WriteLine

public static void WriteLine(object value)
这个重载调用参数的
ToString
方法来生成它的字符串表示。如前所述,
ToString
的默认实现返回类型的完全限定名

您可以在
City
类中重写
ToString
,以便能够在需要字符串的情况下使用此类实例,如
Console.WriteLine

public override string ToString()
{
   return CityName + Temperature.ToString(); 
   // return $"{CityName} : {Temperature}"; // Or use C# string interpolation
}
或者直接生成所需字符串并将其传递给
WriteLine
方法:

Console.WriteLine($"{item.CityName} : {item.Temperature});
Console.WriteLine("{0} {1}", item.CityName, item.Temperature);

您正在将对象传递到
控制台。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);
        }

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

Console.WriteLine($"{item.CityName} : {item.Temperature});
Console.WriteLine("{0} {1}", item.CityName, item.Temperature);

这里您正在尝试打印对象本身。如果要打印CityName和Temperature,则必须在foreach中打印属性

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

但在这里,你只得到一个城市和温度,然后打印出来。在这种情况下,您为什么需要列表?

cityList中的项目是城市类型,这意味着您具有CityName和Temperature属性

你应使用:

Console.WriteLine(item.CityName+”处于“+item.Temperature+”)


或者类似的东西。

但是在这里,你只得到一个城市和温度,然后打印出来。在这种情况下,您为什么需要一个列表?
-这完全不相关,但让我来帮助您回答:因为该代码显然正在进行中,或者是为了使其更小而进行了精简。将第二个城市添加到该列表中是很容易的,但仍然无法按预期工作。此外,OP明确表示,他将在那里存储“一群城市”,所以,好吧,一个列表,惊喜!是的,@quetzalcatl你应该是对的。这可能是一项正在进行的工作。我发现代码中缺少的东西比描述中少。只是想填补空白。这是一个良好的意图!:)@AnjuRaj在这种情况下你为什么需要一份清单?好吧,因为到目前为止我已经学会了数组和列表,而这个任务并不要求我使用我还没有学会的任何东西。你会用什么来代替?也许只有一个变量,一个是临时变量,一个是城市变量?