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

时间:2011-12-01 06:48:47

标签: c# types

假设我有一个对象someDrink。它可以是CocaColaPepsi类型,它们都会继承抽象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是否继承了给定的类型吗?

如果您可以提出更好的方法,重构不是完全

1 个答案:

答案 0 :(得分:25)

当然 - 您可以使用Type.IsAssignableFrom

if (drinkType.IsAssignableFrom(someDrink.GetType()))

请注意,重要的是你没有得到调用的目标和参数的错误方法。每次使用它时我都要查阅文档,幸运的是很少:)