Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim ss As New System.Text.StringBuilder Dim obj As Object, t As Type obj = New SubClassA t = obj.GetType If TypeOf obj Is ClassA Then ss.AppendLine("1,基底クラスを含む、型の一致") End If If GetType(ClassA).IsAssignableFrom(t) Then ss.AppendLine("2,基底クラスを含む、型の一致") End If If GetType(SubClassA) = t Then ss.AppendLine("3,基底クラスを含まない、型の一致") End If obj = New SubClassA() {} t = obj.GetType If t.IsArray AndAlso GetType(ClassA).IsAssignableFrom(t.GetElementType) Then ss.AppendLine("4,objは、配列 ClassA() と一致") End If obj = New List(Of SubClassA) t = obj.GetType If t.IsGenericType AndAlso GetType(List(Of)).IsAssignableFrom(t.GetGenericTypeDefinition) Then ss.AppendLine("5,objは、List(Of) と一致") End If If t.IsGenericType AndAlso t.GenericTypeArguments.Count = 1 AndAlso GetType(ClassA).IsAssignableFrom(t.GenericTypeArguments(0)) Then ss.AppendLine("6,objは、ジェネリック(Of ClassA) と一致") End If obj = New SubListA(Of SubClassA) t = obj.GetType If t.IsGenericType AndAlso GetType(List(Of)).IsAssignableFrom(t.GetGenericTypeDefinition) Then '一致してくれない ss.AppendLine("7,objは、List(Of) と一致") End If If t.IsGenericType AndAlso t.GenericTypeArguments.Count = 1 AndAlso GetType(ClassA).IsAssignableFrom(t.GenericTypeArguments(0)) Then ss.AppendLine("8,objは、ジェネリック(Of ClassA) と一致") End If obj = New SubListB t = obj.GetType If t.IsGenericType AndAlso GetType(List(Of)).IsAssignableFrom(t.GetGenericTypeDefinition) Then '書き方がさっぱり分かりません ss.AppendLine("9,objは、List(Of) と一致") End If If t.IsGenericType AndAlso t.GenericTypeArguments.Count = 1 AndAlso GetType(ClassA).IsAssignableFrom(t.GenericTypeArguments(0)) Then '書き方がさっぱり分かりません ss.AppendLine("10,objは、ジェネリック(Of ClassA) と一致") End If MsgBox(ss.ToString) End Sub Private Class ClassA End Class Private Class SubClassA : Inherits ClassA End Class Private Class SubListA(Of T) : Inherits List(Of T) End Class Private Class SubListB : Inherits List(Of SubClassA) End Class