我有课

Interface IVehicle
{
    int numberOfWheels;
    bool CanCross(string obstacle);
    // etc
}

class Car : IVehicle
{
    public int numberOfWheels = 4;
    public bool CanCross(string obstacle)
    {
       switch(obstacle)
       {
          case "river":
              return false;
          case "grass":
              return true;
          // etc
       }
    }
}

class RaceCar: Car
{
    public int numberOfWheels = 4;
    public bool CanCross(string obstacle)
    {
       switch(obstacle)
       {
          case "river":
              return false;
          case "grass":
              return false;
          // etc
       }
    }
}


然后我有方法:

 public object Foo(IVehicle vehicle, string obstacle)
 {
      if(vehicle.CanCross(obstacle)==false)
      {
          if(vehicle is Car)
             return Foo(new RaceCar(), obstacle);
          else if(vehicle is RaceCar)
             return Foo(new OldCar(), obstacle);
         // etc
          else
             return null;
      }

      // implementation

      return someObject;
 }


请注意,如果车辆无法越过障碍物,我将再次递归调用相同的方法,以尝试使用其他车辆。我的问题是为什么如果vehicle = SpeedCar然后if (vehicle is Car)评估为true?可能是因为它继承自它。我如何检查车辆是否是SpeedCar而不是Car。现在,我可以调用ToString()方法,然后执行正则表达式,但是如果我重命名类,则会破坏代码。

换句话说,如果我经过的车辆无法通过而恰好是汽车或SpeedCar,我将陷入无限循环...

最佳答案

我如何检查车辆是否是SpeedCar而不是Car


vehicle.GetType() == typeof(SpeedCar)

10-08 02:16