2015-03-22 3 views
2

Я пытался отобразить данные класса из списка на C#.Показать данные класса из списка в C#

Вот мое определение класса:

class Vehicle 
    { 
     public string brand; 
     public string model; 
    } 

    class Car : Vehicle 
    { 
     double trunk_capacity;    
     int doors_number; 
     int vmax; 
    } 

Вот мой код, в котором я добавляю автомобиль элемент:

public static void AddCar(List<object> avaliable_cars) 
    { 
     int x = 0; 

     Console.WriteLine("Adding new car:"); 
     Console.WriteLine("1 - Car"); 
     Console.WriteLine("2 - Sport Car"); 
     Console.WriteLine("3 - Truck"); 

     x = int.Parse(Console.ReadLine()); 

     switch (x) 
     { 
      case 1: 
      { 
       Console.WriteLine("Adding new Car."); 

       avaliable_cars.Add(new Car()); 
       Console.WriteLine("Brand"); 
       string brand_tmp = Console.ReadLine(); 
       Console.WriteLine("Model"); 
       string model_tmp = Console.ReadLine(); 
       avaliable_cars.Add(new Car() 
       { 
        brand = brand_tmp, 
        model = model_tmp 
       }); 

      } break; 
     } 

    } 

я не имею представления, как я могу отобразить данные из этого список.

Я пытался сделать это

foreach (object car in avaliable_cars) 
{ 
    Console.WriteLine(car); 
} 

Я не делаю работу. Также я хочу получить доступ к одному элементу за один раз - например, я хочу отобразить марку первого автомобиля в списке. Как я могу это сделать?

PS Im beginner in C#, поэтому мне жаль каких-либо глупых элементов в моем коде.

ответ

1

Приятный способ использования дженериков. Вы могли бы специализироваться вашим метод AddCar так:

static void AddCar<T>(List<T> avaliable_cars) 
     where T : Car ,new() 
    { 
     int x = 0; 

     Console.WriteLine("Adding new car:"); 
     Console.WriteLine("1 - Car"); 
     Console.WriteLine("2 - Sport Car"); 
     Console.WriteLine("3 - Truck"); 

     x = int.Parse(Console.ReadLine()); 

     switch (x) 
     { 
      case 1: 
      { 
       Console.WriteLine("Adding new Car."); 

       avaliable_cars.Add(new T()); 
       Console.WriteLine("Brand"); 
       string brand_tmp = Console.ReadLine(); 
       Console.WriteLine("Model"); 
       string model_tmp = Console.ReadLine(); 
       avaliable_cars.Add(new T() 
       { 
        brand = brand_tmp, 
        model = model_tmp 
       }); 

      } break; 
     } 

    } 

и распечатать данные, которые вы можете просто использовать T вместо объекта:

foreach (T car in avaliable_cars) 
{ 
    Console.WriteLine(car); 
} 

Надеется, что это помогает.

2

Один чистый способ сделать это, чтобы переопределить ToString()

class Vehicle 
{ 
    public string brand; 
    public string model; 
    public override ToString() 
    { 
     return "Brand: " + brand + ", Model: " + model; 
    } 
} 

class Car : Vehicle 
{ 
    double trunk_capacity;    
    int doors_number; 
    int vmax; 
    public override ToString() 
    { 
     return base.ToString() + 
      "trunk_capacity: " + trunk_capacity; // etc. 
    } 
} 

Тогда вы можете просто использовать

Console.WriteLine(car); 
2

Вы должны бросить объект автомобиль типа автомобиля или транспортного средства, а затем распечатать ,

foreach (object car in avaliable_cars) 
{ 
    Console.WriteLine(((Vehicle)car).brand); 
} 
+0

Несомненно, но это не удастся для любого другого подкласса транспортного средства или для экземпляра самого автомобиля. Код хрупкий. –

+0

В этом случае лучше использовать базовый класс, скорее всего, ваш ответ - это путь. –

+0

Я не думаю, что вам нужно бросать автомобиль на автомобиль – Paparazzi

Смежные вопросы