我很抱歉,如果這看起來非常像我幾周前問過的類似問題;我正在學。工廠列表
我有一個函數應該返回一個對象列表 - 有點像一個工廠。在下面的例子中,我有兩個類卡車和汽車誰都從超類車輛繼承。該功能不起作用,但它應該顯示我想要完成的。
編輯:忘了說如何沒有工作。那麼,函數會創建一個例如卡車列表,但不能返回,因爲返回值必須是列表車輛。我不知道如何轉換創建的列表,或者即使它可以轉換。
很顯然,我主要是在尋求如何讓這個該死的東西上班的建議!但是,我也很感激關於如何讓它更具可擴展性的任何想法 - 爲每一個可能的車輛類別提供「案例」聲明並不會讓我感到開心。
v.Populate函數就在那裏用DataReader中的數據填充對象。不應該影響手頭的問題。
調用函數,在這種情況下,我想要一個卡車對象列表:返回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的)所有非必要的代碼被剝離。返回值應該是一個List,其中只有一個空對象。
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;
}
什麼是不與您的代碼的工作?乍一看,它看起來好像它應該工作。 –
你在哪裏/如何調用該方法? –
儘量避免像'它不工作'的陳述。改爲描述結果和/或例外。 – Rotem