-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--

集合.程序+汽车

但为什么它不显示 Car 而不是 Collection.Programe+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

您需要覆盖该ToString()方法(如其他发布的答案所示),或者从对象中检索要打印的Car属性(可通过 的Value属性获得KeyValuePair<string,Car>):

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

问题是你正在输出这个:

Cultas Supreme-- Collection.Programe+Car

发生这种情况是因为您编写:

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

既然CAR.ValueCar实例,当你把它写出来的时候,它会调用Car.ToString()方法把它Car变成一个字符串。由于您没有ToString()Car类中覆盖,它只输出类的名称: Collection.Programe+Car(因为 Car 是 Programe 中的嵌套类)。

要使其输出适当的值,您应该在 car 中写出特定值(更改CAR.Value为或类似),或者在 Car 类CAR.Value.Make中提供适当的实现。ToString()

于 2012-05-14T19:03:03.190 回答
0

你会想要去 Car 类并覆盖汽车的ToString方法。在这种方法中,让它写出您认为最好的汽车字符串表示形式。

您还可以(或另外)更改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.Value.Model,CAR.Value.Make);

CAR 指 KeyValuePair(String model, CAR car)
CAR.KEY 指模型
CAR.Value 指 CAR
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

尝试

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

一个快速而肮脏的解决方案是覆盖 Car 上的 ToString() 方法

它显示 Cultas Supreme - 这是一个字符串 Correct Collection.Program + Car 这是 Car 对象的值

尝试将其添加到您的汽车对象中...并且您将了解 Console.Writeline 在给定时和对象将对象输出到字符串方法。

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