-6
class Program
{
    static void Main(string[] args)
    {   
        Car car1 = new Car();  
        car1.Make  = "Oldsmobile";  
        car1.Model = "Cultas Supreme";  

        Car car2 = new Car();  
        car2.Make  = "GEO";
        car2.Model = "Prism";  

        Dictionary<string, Car> myDicitionary = new Dictionary<string, Car>();
        myDicitionary.Add(car1.Model, car1);
        myDicitionary.Add(car2.Model, car2);
        foreach (KeyValuePair<string, Car> CAR in myDicitionary)
        {
           
            Console.WriteLine("{0}-- {1}", CAR.Key,CAR.Value);
        }
        Console.ReadLine();
    }

    class Car 
    {
        public string Make { get; set; }
        public string Model { get; set; }
    }       
}

出力結果

Cultas Supreme-- Collection.Programe+Car Prism--

Collection.Program+Car

しかし、 Collection.Programe+Car` の代わりに Car の値が表示されないのはなぜですか

4

7 に答える 7

3

デフォルトの.ToString()メソッドは、オブジェクトの名前を返します。メソッドが他のものを返すようにしたい場合は、それをオーバーライドする必要があります。

class Car
{
   // same as before

   public override string ToString()
   {
        return string.Format("{0} {1}", Make, Model);
   }
}
于 2012-05-14T19:01:47.100 に答える
2

問題は、これを出力していることです:

Cultas Supreme-- Collection.Programe+Car

これは、次のように記述したために発生します。

Console.WriteLine("{0}-- {1}", CAR.Key,CAR.Value);

CAR.ValueがインスタンスになるのでCar、これを書き出すとCar.ToString()メソッドが呼び出さCarれて が文字列に変換されます。ToString()クラスでオーバーライドしなかったためCar、クラスの名前を出力するだけです: Collection.Programe+Car (Car は Programe のネストされたクラスであるため)。

これを取得して適切な値を出力するには、 car に特定の値を書き出す (に変更CAR.Valueするなど) か、 Car クラス内でCAR.Value.Makeの適切な実装を提供する必要があります。ToString()

于 2012-05-14T19:03:03.190 に答える
2

メソッドをオーバーライドするかToString()(他の投稿された回答で示されているように)、オブジェクトから印刷するプロパティを取得する必要があります(のプロパティCarを通じて利用可能):ValueKeyValuePair<string,Car>

    foreach (KeyValuePair<string, Car> CAR in myDicitionary)
    {
        Console.WriteLine("{0}-- {1}", CAR.Key, CAR.Value.Make);
    }
于 2012-05-14T19:03:46.927 に答える
0

試す

    Console.WriteLine("{0}-- {1}", CAR.Value.Model,CAR.Value.Make);

CAR は KeyValuePair を参照します (文字列モデル、CAR カー)
CAR.KEY はモデル
CAR.Value を参照
します CAR.VALUE.MAKE は CAR.MAKE を参照します
CAR.VALUE.Model は CAR.Model を参照します

他の回答で述べたように、 Car クラスで ToString() をオーバーライドすることもできます

public override ToString()
{
   return String.Format("{0}---{1}", Model, Make);
}

ToString() をオーバーライドした後、 car.ToString を使用できます

foreach (KeyValuePair<string, Car> CAR in myDicitionary)
        {

            Console.WriteLine(CAR.Value);
        }
于 2012-05-14T19:05:32.440 に答える
0

手っ取り早い解決策は、Car の ToString() メソッドをオーバーライドすることです。

その表示 Cultas Supreme - これは文字列 Correct Collection.Program + Car オブジェクトの値です

これをあなたの車のオブジェクトに追加してみてください...そして、Console.Writelineが指定され、オブジェクトがオブジェクトを文字列メソッドに出力することを理解できます。

public override string ToString()
{
  return this.Make
}
于 2012-05-14T19:08:34.483 に答える
0

ToStringCar クラスに移動して、車のメソッドをオーバーライドします。その方法では、車の最高の文字列表現が何であるかを書き出す.

印刷時に車のメーカーのみを表示するように(または追加で) 変更することもできConsole.WriteLine("{0}-- {1}", CAR.Key,CAR.Value);ます。Console.WriteLine("{0}-- {1}", CAR.Key,CAR.Value.Make);

于 2012-05-14T19:03:05.310 に答える
0

試す

Console.WriteLine("{0}-- {1}", CAR.Key,CAR.Value.Make)
于 2012-05-14T19:02:24.217 に答える