C# - 如何使用If语句检查对象类型

时间:2016-05-10 12:44:53

标签: object

我目前正在编写一个名为' Vehicle'的父类的应用程序。还有两个名为“Car'和'卡车'。我的问题是,我想搜索车辆的完整列表,并且只返回每辆车或每辆卡车,具体取决于放入方法的对象。现在我必须为ach搜索术语编写一个方法,如下所示:

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;
        }
    }

我唯一的问题是名字不是我想要搜索的唯一方式,所以对于我要执行的每次搜索,我将不得不写两种方法。我正在寻找的是一种将Object传递给方法的方法,然后依赖于对象,它会将必要的细节附加到字符串,如下所示:

    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;
        }
    }

}

基本上我需要的是一种传递父对象并在创建结果字符串之前检查对象是否属于某种子类型的方法,而不是必须将每个单独类型的子对象传递给方法来获取结果我想要。

提前谢谢。

1 个答案:

答案 0 :(得分: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;
    }
}

希望这有帮助。