Determine if a generic param is a Nullable type

前端 未结 3 1718
余生分开走
余生分开走 2020-12-02 01:52

I have the following VB.NET function, for example:

Public Function MyFunction (Of TData) (ByVal InParam As Integer) As TData

End Sub

How d

相关标签:
3条回答
  • 2020-12-02 01:59

    VB.net:

    Dim hasNullableParameter As Boolean = _
            obj.GetType.IsGenericType _
            AndAlso _
            obj.GetType.GetGenericTypeDefinition = GetType(Nullable(Of ))
    

    C#:

    bool hasNullableParameter = 
            obj.GetType().IsGenericType && 
            obj.GetGenericTypeDefinition().Equals(typeof(Nullable<>));
    
    0 讨论(0)
  • 2020-12-02 02:05

    You could use the code given in this answer, add an extension

    public static bool IsNullable(this Type type) {
        Contract.Requires(type != null);
        return type.IsDerivedFromOpenGenericType(typeof(Nullable<>));
    }
    

    and say

    bool nullable = typeof(TData).IsNullable();
    
    0 讨论(0)
  • 2020-12-02 02:10

    One way is:

    If Nullable.GetUnderlyingType(GetType(TData)) <> Nothing
    

    ... at least, the C# is:

    if (Nullable.GetUnderlyingType(typeof(TData)) != null)
    

    That's assuming you're asking whether it's a nullable value type. If you're asking whether it's a nullable value type or a class then the C# version would be:

    if (default(TData) == null)
    

    but I'm not sure whether a simple VB translation would work there, as "Nothing" is slightly different in VB.

    0 讨论(0)
提交回复
热议问题