确定通用参数是否为Nullable类型

时间:2011-03-03 13:45:03

标签: .net vb.net generics nullable

我有以下VB.NET功能,例如:

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

End Sub

如何在函数中确定TData是否为NULLable类型?

3 个答案:

答案 0 :(得分:41)

一种方法是:

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

......至少,C#是:

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

假设您在询问它是否为可以为空的值类型。如果你问的是它是可以为空的值类型还是类那么C#版本将是:

if (default(TData) == null)

但是我不确定一个简单的VB翻译是否适用于那里,因为“Nothing”在VB中略有不同。

答案 1 :(得分:6)

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

答案 2 :(得分:1)

您可以使用此answer中提供的代码,添加扩展程序

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

并说

bool nullable = typeof(TData).IsNullable();