在泛型迭代中需要帮助

  • 本文关键字:帮助 泛型 迭代 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; }
    }       
}

输出结果

文化至尊-- 收藏.程序+汽车棱镜--

收藏.程序+汽车

但为什么它不显示 Car 而不是 Collection.Programe+Car 的价值

默认的

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

class Car
{
   // same as before
   public override string ToString()
   {
        return string.Format("{0} {1}", Make, Model);
   }
}

问题是你正在输出这个:

至尊文化-收藏.程序+汽车

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

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

由于CAR.Value将成为Car实例,因此当您将其写出时,它将调用Car.ToString()方法将Car转换为字符串。 由于您没有覆盖Car类中的ToString(),因此它只输出类的名称:Collection.Programe+Car(因为Car是Programe中的嵌套类)。

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

您需要

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

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

转到 Car 类并重写 car 的 ToString 方法。 在这种方法中,让它写出你认为汽车的最佳字符串表示形式。

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

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

它的显示Cultas Supreme - 这是一个字符串 正确集合程序 + 汽车,这是汽车对象的值

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

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

尝试

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

CAR是指KeyValuePair(字符串模型,CAR汽车)
汽车。键参考模型
汽车。价值参考汽车
汽车。价值。参考汽车。做
汽车。价值。型号参考CAR。型

如其他答案所述,您也可以在 Car 类中覆盖 ToString()

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

覆盖 ToString() 后,您可以使用 car。到字符串

foreach (KeyValuePair<string, Car> CAR in myDicitionary)
        {
            Console.WriteLine(CAR.Value);
        }

尝试

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

最新更新