說我有一個對象,someDrink
。它可能是CocaCola
或Pepsi
類型,它們都繼承了抽象Cola
(繼承Drink
)或任何類型的飲料。我有一個方法返回一個最喜歡的飲料的字符串。檢查對象類型是否繼承抽象類型
public string PreferredDrink(Drink someDrink)
{
var orderOfPreference = new List<Type> {
typeof (Cola),
typeof (PurpleDrank),
typeof (LemonLimeBitters)
...
}
foreach (drinkType in orderOfPreference) {
if (someDrink.GetType() == drinkType) {
return someDrink.ToString()
}
}
throw new Exception("Water will be fine thank you");
}
上面的代碼不會工作,因爲someCola
類型永遠不能等於抽象類型。理想情況下,我想這樣做:
if (someCola is drinkType) ...
但is
關鍵字只允許一個類名之後。
是否有另一種方法來檢查someDrink
是否繼承給定的類型?
重構不是完全如果您可以建議一個更好的方法來做到這一點,就不會出現問題。
根據[System.Object.GetType](http://msdn.microsoft.com/en-us/)上的文檔, library/system.object.gettype.aspx),它返回該對象的* exact *運行時類型。所以它不會在你的情況下返回'Drink'。也許代碼調用你的方法有問題。 – Strelok