gpt4 book ai didi

c# - 检查对象类型是否继承了抽象类型

转载 作者:可可西里 更新时间:2023-11-01 07:53:14 24 4
gpt4 key购买 nike

假设我有一个对象,someDrink。它可以是 CocaColaPepsi 类型,它们都继承了抽象的 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()))

请注意,不要以错误的方式获取调用目标和参数,这一点很重要。我每次使用它都必须查阅文档,幸运的是很少:)

关于c# - 检查对象类型是否继承了抽象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8337535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com