2017-04-07 9 views
3

おそらく、あなたのほとんどの人(熟練したプログラマー)にとってタイトルはうまく聞こえませんが、私はC#の基礎を学んだ3週間目です。次の課題を解決する方法を理解できません。 私は都市の束のためにいくつかの気温を保存し、最初にcityNameを求め、次にその都市の実際の気温を求めます。これらすべてのものはリスト<に保存する必要があります。クラスとコンストラクタを使用します。 私は(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(); 

    } 
} 

答えて

5

文字列を渡す代わりにオブジェクトをConsole.WriteLine(item)に渡しています。 Console.WriteLineは、デフォルトでnamespace + class nameを返すそのオブジェクトの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("{0} {1}", item.CityName, item.Temperature); 
3

変更Console.WriteLine(item);へ単にCityオブジェクトの内容を書き出す場合は、次のいずれかのオプションを使用します。

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)); 
2

をあなたはWriteLineのこのオーバーロードを使用している:

public static void WriteLine(object value) 

とそのを生成するために、この過負荷コールパラメータのToString方法文字列表現。前述のようにToStringのデフォルトの実装では、型の完全修飾名が返されます。Here

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

あなたは文字列がConsole.WriteLine

public override string ToString() 
{ 
    return CityName + Temperature.ToString(); 
    // return $"{CityName} : {Temperature}"; // Or use C# string interpolation 
} 

か、直接必要な文字列を生成し、WriteLine方法にそれを渡すように期待されているこの種のことに使用するインスタンスであるためにあなたのCityクラスでToStringを上書きすることができます

0

あなたがオブジェクト自体を印刷しようとしています。 CityNameとTemperatureを印刷する場合は、foreach内でプロパティを印刷する必要があります。

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

しかし、ここでは都市と温度が1つしか得られず、印刷されています。その場合、なぜあなたはリストを必要としますか?

+0

'しかし、ここでは、都市と温度が一つになって印刷されています。その場合、なぜリストが必要なのですか? - それはまったく関係がありませんが、答えるのを手伝ってください。そのコードは明らかに作業中であるか、サイズを小さくするために切り詰められているためです。 2番目の都市をそのリストに追加するのは簡単ですが、意図した通りにはまだ機能しません。また、OPは明らかに、彼はそこに "たくさんの都市"を保存すると言っています。そうですね、リスト、驚き! – quetzalcoatl

+0

はい、@quetzalcoatlあなたは正しいはずです。これは進行中の仕事かもしれません。私は、記述に記述されているものよりもコードに欠けているものがあることを知っています。ギャップを埋めるだけだった。それは良い意図だった! :) – AnjuRaj

+0

@AnjuRajなぜあなたはその場合にリストが必要ですか? これまでのところ、私は配列とリストを学んだので、この作業はまだ私が学んでいないものを使用するように私に影響を与えません。あなたは代わりに何を使用しますか?たぶん単一の変数、Tempのための変数とCityのための変数? – Gusto

2

cityListの項目はCity型で、CityNameとTemperatureのプロパティを持っています。

あなたは使用する必要があります。

Console.WriteLine(item.CityName + " is at " + item.Temperature + ".");

または類似した何かを。

関連する問題