说我有一个对象,someDrink
。它可能是类型CocaCola
or 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
永远不可能equal to一个抽象类型。理想情况下我想做类似的事情:
if (someCola is drinkType) ...
But the is
关键字只允许在其后添加类名。
还有其他方法可以检查是否someDrink
继承给定类型?
重构不是totally如果您能提出更好的方法来做到这一点,这是不可能的。
当然 - 你可以使用Type.IsAssignableFrom http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx:
if (drinkType.IsAssignableFrom(someDrink.GetType()))
请注意,重要的是不要以错误的方式获取调用的目标和参数。每次使用它时我都必须查阅文档,幸运的是这种情况很少:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)