Проверьте, наследует ли тип объекта абстрактный тип

Скажем, у меня есть объект, 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 данный тип?

Рефакторинг не полностью исключен, если вы можете предложить лучший способ сделать это.

14
задан jamesrom 1 December 2011 в 06:48
поделиться