【发布时间】:2012-01-10 08:57:16
【问题描述】:
假设我有一个对象,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 是否继承给定类型?
如果您能提出更好的方法,重构并不是完全不可能的。
【问题讨论】:
-
嗯,根据System.Object.GetType 上的文档,它返回对象的exact 运行时类型。所以在你的情况下它永远不会返回
Drink。调用你的方法的代码可能有问题。