说我有一个对象,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");
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用,因为类型someCola永远不能等于抽象类型.理想情况下,我想做的事情如下:
if (someCola is drinkType) ...
Run Code Online (Sandbox Code Playgroud)
但is关键字只允许后面的类名.
有没有其他方法来检查是否someDrink继承了给定的类型?
如果你能提出一个更好的方法,重构并不是完全不可能的.
Jon*_*eet 25
当然 - 你可以使用Type.IsAssignableFrom:
if (drinkType.IsAssignableFrom(someDrink.GetType()))
Run Code Online (Sandbox Code Playgroud)
请注意,重要的是您不能以错误的方式获取调用的目标和参数.我每次使用它都要咨询文档,幸好很少:)
| 归档时间: |
|
| 查看次数: |
5523 次 |
| 最近记录: |