列表未正确输出

时间:2014-10-29 01:23:39

标签: c# list class member

我有一个列表,我正在读取数据。我检查了如何输出列表但是对其他人有用的东西对我不起作用。我注意到我看到的所有例子都没有像我一样在列表中使用过类,我找不到这样的例子。

这是我的代码:

private static void AddCar(Vechicle _Motor, List<Vechicle> vehicles)
      {
          //int number = 1;
          Console.Clear();

          Vechicle v = new Vechicle();
          Console.Write("/////////////////////ADDING CAR DETAILS\\\\\\\\\\\\\\\\\\\\\\\\");
          Console.Write("\n\nEnter Make: ");
          v.Make = Console.ReadLine();              
          Console.Write("\n\nEnter Model: ");
          v.Model = Console.ReadLine();              
          Console.Write("\n\nEnter Year: ");
          v.Year = Console.ReadLine();
          vehicles.Add(v);
          Console.Clear();
         foreach (Vechicle value in vehicles)
          {
              Console.WriteLine(vehicles);
          }


      }

这是输出:

output

感谢您的帮助!

我现在改变了:

foreach (Vechicle value in vehicles)
          {
              Console.WriteLine(vehicles);
          }

TO:

foreach (Vechicle value in vehicles)
          {
              Console.WriteLine(value);
          }

正如评论中所建议的,但现在我明白了:

result

2 个答案:

答案 0 :(得分:6)

默认情况下,Console.WriteLine会在您传递的参数上调用ToString - 因为您正在传递集合,所以它使用ToString的默认实现,它只打印类名。

如果Vehicle以合理的输出(see other answer for implementation)覆盖.ToString而不是简单地将value传递给Console.WriteLine

 foreach (var value in vehicles)
 {
     Console.WriteLine(value);
 }

或直接打印您需要的内容:

    foreach (var value in vehicles)
    {
        Console.WriteLine("Make: {0}, model:{1}", value.Make, value.Model);
    }

对于.ToString(),请考虑使用String.Format,因为如果您需要具有固定的非数字格式或非默认数字格式的内容,它将提供比+更多的格式选项:

 public class Vehicles
 { 
    ....
    public override string ToString() 
    { 
       return String.Format("Make: {0}, model:{1}", Make, Model);
    }
 }

答案 1 :(得分:3)

您需要在车辆类中重载ToString方法,或者创建一个返回make model和year字符串的方法。

一些示例代码。

    public class Vehicles
    {
        public string Make;
        public string Model;
        public string Year;

        public override string ToString()
        {
            return Make + " " + Model + " " + Year;
        }
    }

每当您调用Vehicles.ToString()时,都会覆盖ToString方法,它将返回make model year。