我需要确定一个对象在其继承层次结构中是否具有特定类型,但是我找不到一种好方法。
我的类的一个非常基本的示例版本是:
Public Class Domain
End Class
Public Class DerivedOne
Inherits Domain
End Class
Public Class DerivedTwo
Inherits DerivedOne
End Class
Public Class DerivedThree
Inherits Domain
End Class
以下确实有效,但在我看来并不是很优雅。此外,创建的继承级别越多,需要完成的检查越多,并且很容易忘记这段代码需要更新。
If GetType(T) Is GetType(Domain) OrElse _
GetType(T).BaseType Is GetType(Domain) OrElse _
GetType(T).BaseType.BaseType Is GetType(Domain) Then
End If
有没有办法获得'T的继承层次结构中的域类型'?
(C#或VB.NET欢迎回答)
更新
由于我自己的白痴,我错过了一些重要的信息!
T是一个Type对象(来自类'泛型类型)
答案 0 :(得分:23)
您可以使用Type.IsAssignableFrom
方法。
在VB中:
If GetType(Domain).IsAssignableFrom(GetType(DerivedThree)) Then
在C#中:
if (typeof(Domain).IsAssignableFrom(typeof(DerivedThree)))
答案 1 :(得分:1)
为什么没人提Type.IsSubclassOf(Type)
?
https://docs.microsoft.com/en-us/dotnet/api/system.type.issubclassof?view=netframework-4.7.2
如果为两个相等的类型;)
答案 2 :(得分:0)
在C#中(VB也应该这样)你可以用速记来执行检查和使用变量并避免使用转换部分:
var val = x as Domain;
然后像这样使用val
:
if(val != null)
{
// use val
}
答案 3 :(得分:-3)
is operator怎么样?
if(obj is Domain)
{
//
}