如果这看起来很像我几周前提出的类似问题,我深表歉意;我在学习。
我有一个函数应该返回一个对象列表——有点像工厂。在下面的示例中,我有两个类 Truck 和 Car,它们都继承自超类 Vehicle。该功能不起作用,但它应该显示我想要完成的事情。
编辑:忘了说它是如何不起作用的。好吧,该函数创建了一个列表,例如卡车,但不能返回它,因为返回值必须是车辆列表。我不知道如何转换创建的列表,或者即使它可以转换。
显然,我主要是在寻求建议如何让这该死的东西发挥作用!但我也很感激任何关于如何让它更具可扩展性的想法——为每个可能的 Vehicle 类都有一个“案例”声明并不会让我高兴。
v.Populate 函数只是用来用来自 DataReader 的数据填充对象。应该不会影响手头的问题。
调用该函数,在这种情况下,我想要一个带有卡车对象的列表: return PopulateList("Truck", gc);
private List<Vehicle> PopulateList(String type, GenericConnection gc)
{
Vehicle v;
var ret = new List<Vehicle>();
var r = gc.ExecuteReader();
while (r.Read())
{
switch (type)
{
case "Truck":
v = new Truck();
break;
case "Car":
v = new Car();
break;
default:
throw new ArgumentException("Unknown Vehicle: " + type, "type");
}
v.Populate(r);
ret.Add(v);
}
r.Close();
return ret;
}
为清楚起见,这里是相同函数的副本,但现在所有非必要代码(主要与 DataReader 相关)都被删除了。返回值应该是一个列表,其中只有一个空对象。
private List<Vehicle> PopulateList(String type)
{
Vehicle v;
var ret = new List<Vehicle>();
switch (type)
{
case "Truck":
v = new Truck();
case "Car":
v = new Car();
}
}
ret.Add(v);
return ret;
}