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)