这是我的问题。

我有两个类都从同一个类继承。即从汽车类继承的汽车类和厢式汽车类。我将它们添加到常见的车辆类型列表中。汽车类具有noofseats属性,而面包车具有weight属性。有没有一种方法可以使用foreach循环遍历它们,并根据它们是car类还是van类来输出?

foreach (van v in vehiclelist)
{
  lsttest.Items.Add(v.weight;)
}

foreach (car c in vehiclelist)
{
  lsttest.Items.Add(c.nofoseats;)
}


我收到错误消息:“无法将类型为“ Test.Car”的对象转换为类型“ Test.Van”。”

有没有简单的方法可以解决此问题,或者根本不可能?谢谢

最佳答案

对我来说,多态性的全部目的是让我不在乎我的对象到底是什么底层类型。尽管您可以使用此处已经提到的不同方法轻松地检查出哪种类型,但我的答案是完全不要这样做。相反,您应该将不同的行为抽象为一个通用函数,然后调用该方法。快速示例:

   class Vehicle
    {
        abstract public int GetMeasurement();
    }

    class Car : Vehicle
    {
       //cars are measured in numberOfSeats
       override public int GetMeasurement()
       {
          return numberOfSeats;
       }

        private int numberOfSeats;
    }

   class Van: Vehicle
   {
       //vans are measured by weight
       override public int GetMeasurement()
       {
          return weight;
       }

      private int weight;
   }

  foreach (Vehicle v in vehiclelist)
  {
     //I don't need to do any type checking:
     //polymorphism magically gets the right value for me
     lsttest.Items.Add(v.GetMeasurement());
  }


这样做的好处是,现在我可以在各地重复使用相同的方法,而不必关心我真正的类型。现在,我可以使用Vehicle进行各种有趣的事情(API等):以后,如果我想添加其他车辆类型,则无需进行任何更改。我创建了一种新的交通工具类型,实现了GetMeasurement()函数,它神奇地起作用了。当您开始购买3、5、15种不同的车型时,您可以在这里轻松看到优势。

关于c# - C#使用foreach遍历包含2个不同对象类的列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20410442/

10-12 13:09