2016-05-10 1 views
0

В настоящее время я пишу приложение с родительским классом с именем «Транспортное средство» и двумя дочерними классами с именем «Автомобиль» и «Грузовик». Моя проблема заключается в том, что я хотел бы искать полный список транспортных средств и возвращать только каждый автомобиль или каждый грузовик в зависимости от того, какой объект помещен в метод. Сейчас я должен написать метод для термина поиска ACH, такие, как показано ниже:C# - Как проверить тип объекта, используя оператор If

public string searchCarsByName(string nameString) 
    { 
     string carNames = ""; 
     foreach (Car car in Vehicles.OfType<Car>()) 
     { 
      if (car.Name.Contains(nameString)) 
      { 
       carNames += car.ToString(); 
      } 
     } 

     if (carNames == "") 
     { 
      return "No cars found"; 
     } 
     else 
     { 
      return carNames; 
     } 
    } 

    public string searchTrucksByName(string nameString) 
    { 
     string truckNames = ""; 
     foreach (Truck truck in Vehicles.OfType<Truck>()) 
     { 
      if (truck.Name.Contains(nameString)) 
      { 
       truckNames += name.ToString(); 
      } 
     } 

     if (truckNames == "") 
     { 
      return "No vehicle found"; 
     } 
     else 
     { 
      return truckNames; 
     } 
    } 

Моя единственная проблема заключается в том, что имена не единственный способ, которым я хотел бы найти, так что для каждого поиска я иду для выполнения тогда мне придется написать два метода. Что я ищу способ, чтобы передать объект в метод, а затем в зависимости от объекта, он будет добавлять необходимые детали в строку, например, как показано ниже:

public string searchVehiclesByName(Vehicle nameString) 
    { 
     string vehicleNames = ""; 
    if(Vehicle.Type == car) 
    { 
     foreach (Car car in Vehicles.OfType<Car>()) 
     { 
      if (car.Name.Contains(nameString)) 
      { 
       vehicleNames += car.ToString(); 
      } 
     } 
    } 
    else 
    { 

     foreach (Truck truck in Vehicles.OfType<Truck>()) 
     { 
      if (truck.Name.Contains(nameString)) 
      { 
       vehicleNames += truck.ToString(); 
      } 
     }    
    } 
    if (vehicleNames == "") 
     { 
      return "No vehicles found"; 
     } 
     else 
     { 
      return vehicleNames; 
     } 
    } 

}

По существу то, что мне нужно, - это способ передать родительский объект и проверить, является ли объект определенным дочерним типом, прежде чем создавать результирующую строку, вместо того, чтобы передавать каждый отдельный тип дочернего объекта в метод для получения желаемых результатов.

Заранее спасибо.

+0

проверьте этот ответ. http://stackoverflow.com/questions/983030/type-checking-typeof-gettype-or-is – Mana

+0

У * все * транспортные средства имеют * имя *? Возможно, свойство 'Name' должно быть в классе транспортных средств? – musefan

ответ

0

Пожалуйста, посмотри на это: Type Checking: typeof, GetType, or is?

public string searchVehiclesByName(Vehicle vehicle) 
{ 
    string vehicleNames = ""; 
    if(vehicle.GetType() == typeof(Car)) 
    { 
     foreach (Car car in Vehicles.OfType<Car>()) 
     { 
      if (car.Name.Contains(nameString)) 
      { 
       vehicleNames += car.ToString(); 
      } 
     } 
    } 
    else 
    { 
     foreach (Truck truck in Vehicles.OfType<Truck>()) 
     { 
      if (truck.Name.Contains(nameString)) 
      { 
       vehicleNames += truck.ToString(); 
      } 
     }    
    } 

    if (vehicleNames == "") 
    { 
     return "No vehicles found"; 
    } 
    else 
    { 
     return vehicleNames; 
    } 
} 

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