dim p as Nullable(of double) = 10.0
     p.GetType()   返回的类型并不是Nullable本身的类型,而是Nullable的RuntimeType,为double

,要返回正确的类型,需要使用GetType(Nullable(of double))

直接输出Nullable的类型的话如下:

{Name = “Nullable`1” FullName = “System.Nullable`1[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]”}
显然,这个在部份应用下是不能满足需要的,在部份应用场合下,Nullable是需要隐形的。

所以需要判断IsGenericType属性,如果是的话,就要通过GetGenericArguments()方法来返回包含的具体类型


        Dim t As Type = GetType(Nullable(Of Double))


        If t.IsGenericType Then
            ' If this is a generic type, display the type arguments.
            '
            Dim typeArguments As Type() = t.GetGenericArguments()


            Console.WriteLine(vbTab & "List type arguments (" _
                & typeArguments.Length & "):")


            For Each tParam As Type In typeArguments
                ' If this is a type parameter, display its position.
                '
                If tParam.IsGenericParameter Then
                    Console.WriteLine(vbTab & vbTab & tParam.ToString() _
                        & vbTab & "(unassigned - parameter position " _
                        & tParam.GenericParameterPosition & ")")
                Else
                    Console.WriteLine(vbTab & vbTab & tParam.ToString())
                End If
            Next tParam
        End If
        Console.ReadLine()