在迭代迭代中需要帮助

时间:2012-05-14 18:57:40

标签: c#

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 +车载

但为什么Doest没有显示Car的价值而不是Collection.Programe + Car`

7 个答案:

答案 0 :(得分:3)

默认的.ToString()方法返回对象的名称。如果您希望该方法返回其他内容,则需要覆盖它:

class Car
{
   // same as before

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

答案 1 :(得分: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.Value.Make或类似值),或提供ToString()的相应实现在你的汽车课上。

答案 2 :(得分:2)

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

    foreach (KeyValuePair<string, Car> CAR in myDicitionary)
    {
        Console.WriteLine("{0}-- {1}", CAR.Key, CAR.Value.Make);
    }

答案 3 :(得分:0)

尝试

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

答案 4 :(得分:0)

您需要转到Car类并覆盖汽车的ToString方法。在那种方法中,它可以写出你认为汽车的最佳字符串表示形式。

您还可以(或另外)将Console.WriteLine("{0}-- {1}", CAR.Key,CAR.Value);更改为Console.WriteLine("{0}-- {1}", CAR.Key,CAR.Value.Make);,以便在打印时显示汽车的品牌。

答案 5 :(得分: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);
        }

答案 6 :(得分:0)

快速而肮脏的解决方案是覆盖Car

上的ToString()方法

它的表现 Cultas Supreme - 这是一个字符串正确 Collection.Program + Car是Car对象的值

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

public override string ToString()
{
  return this.Make
}