Скажем, у меня есть объект, 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
данный тип?
Рефакторинг не исключается, если вы можете предложить лучший способ сделать это.