假设我有一个对象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
是否继承了给定的类型吗?
如果您可以提出更好的方法,重构不是完全。
答案 0 :(得分:25)
当然 - 您可以使用Type.IsAssignableFrom
:
if (drinkType.IsAssignableFrom(someDrink.GetType()))
请注意,重要的是你没有得到调用的目标和参数的错误方法。每次使用它时我都要查阅文档,幸运的是很少:)