ジェネリック型の型パラメータ(例えばList<int>における< >内の部分)を取得したい場合はGetGenericArgumentsメソッドを使うことができます。 型パラメータの情報もTypeクラスとして取得されます。 Typeが型パラメータを表す場合、IsGenericParameterプロパティtrueとなります。

GetGenericArgumentsメソッドは、オープンジェネリック型・クローズジェネリック型のどちらの型情報に対しても用いることができます。

ジェネリック型における型パラメータの型情報を取得する
Imports System
Imports System.Collections.Generic

Class Sample
  Shared Sub Main()
    ClassifyGenericType(GetType(List(Of)))
    ClassifyGenericType(GetType(List(Of Integer)))
    ClassifyGenericType(GetType(List(Of String)))
    ClassifyGenericType(GetType(Dictionary(Of ,)))
    ClassifyGenericType(GetType(Dictionary(Of String, Integer)))
    ClassifyGenericType(GetType(Action(Of ,,,)))
    ClassifyGenericType(GetType(Action(Of Integer, Single, Double, String)))
    ClassifyGenericType(GetType(Integer))
  End Sub

  Shared Sub ClassifyGenericType(ByVal t As Type)
    Console.Write("{0}: ", t.Name)

    If t.IsGenericType Then
      ' 型がジェネリック型の場合、ジェネリック型定義か構築ジェネリック型か調べる
      If t.IsGenericTypeDefinition Then
        Console.Write("ジェネリック型定義; ")
      Else
        Console.Write("構築ジェネリック型; ")
      End If

      ' ジェネリック型の型パラメータの型情報を取得して表示する
      For Each ta As Type In t.GetGenericArguments()
        Console.Write("{0}, ", ta.Name)
      Next
      Console.WriteLine()
    Else
      Console.WriteLine("(非ジェネリック型)")
    End If
  End Sub
End Class
実行結果
List`1: ジェネリック型定義; T, 
List`1: 構築ジェネリック型; Int32, 
List`1: 構築ジェネリック型; String, 
Dictionary`2: ジェネリック型定義; TKey, TValue, 
Dictionary`2: 構築ジェネリック型; String, Int32, 
Action`4: ジェネリック型定義; T1, T2, T3, T4, 
Action`4: 構築ジェネリック型; Int32, Single, Double, String, 
Int32: (非ジェネリック型)

ジェネリックメソッドの型パラメータも同様に取得することができます。 この場合、まず対象となるジェネリックメソッドのMethodInfoを取得し、その後MethodInfo.GetGenericArgumentsメソッドを呼び出します。

この例で使用しているGetMethodメソッドについては後述の§.メンバ情報の取得 (MemberInfo)で解説しています。 また、型パラメータを含むメソッドやジェネリックメソッドの取得に関しては§.型パラメータを指定した取得 (ジェネリック型のメソッド/ジェネリックメソッドの取得)を参照してください。