检查对象类型是否继承抽象类型

jam*_*rom 14 c# types

说我有一个对象,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");
}
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用,因为类型someCola永远不能等于抽象类型.理想情况下,我想做的事情如下:

if (someCola is drinkType) ...
Run Code Online (Sandbox Code Playgroud)

is关键字只允许后面的类名.

有没有其他方法来检查是否someDrink继承了给定的类型?

如果你能提出一个更好的方法,重构并不是完全不可能的.

Jon*_*eet 25

当然 - 你可以使用Type.IsAssignableFrom:

if (drinkType.IsAssignableFrom(someDrink.GetType()))
Run Code Online (Sandbox Code Playgroud)

请注意,重要的是您不能以错误的方式获取调用的目标和参数.我每次使用它都要咨询文档,幸好很少:)