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?
Solution 1:
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.
Solution 2:
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<>));
Solution 3:
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();