Chad
Chad

Reputation: 24679

Determine if a generic param is a Nullable type

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

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

End Sub

How do I, in a function, determine if TData is a NULLable Type?

Upvotes: 27

Views: 8410

Answers (3)

jason
jason

Reputation: 241641

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();

Upvotes: 2

Dennis Traub
Dennis Traub

Reputation: 51634

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<>));

Upvotes: 7

Jon Skeet
Jon Skeet

Reputation: 1500385

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.

Upvotes: 48

Related Questions