检查对象类型是否继承抽象类型
问题描述:
说我有一个对象,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
是否继承给定的类型?
重构不是完全如果您可以建议一个更好的方法来做到这一点,就不会出现问题。
答
当然 - 你可以使用Type.IsAssignableFrom
:
if (drinkType.IsAssignableFrom(someDrink.GetType()))
需要注意的是,重要的是你没有得到调用和参数的南辕北辙的目标。我必须在每次使用它时查阅文档,幸好很少:)
根据[System.Object.GetType](http://msdn.microsoft.com/en-us/)上的文档, library/system.object.gettype.aspx),它返回该对象的* exact *运行时类型。所以它不会在你的情况下返回'Drink'。也许代码调用你的方法有问题。 – Strelok