Подтвердить что ты не робот

Определите, является ли общий параметр нулевым типом

У меня есть следующая функция VB.NET, например:

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

End Sub

Как в функции определить, является ли TData NULLable Type?

4b9b3361

Ответ 1

Один из способов:

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

... по крайней мере, С#:

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

Предположим, вы спрашиваете, является ли это типом значения с нулевым значением. Если вы спрашиваете, является ли это типом значений с нулевым значением или классом, то версия С# будет:

if (default(TData) == null)

но я не уверен, будет ли там работать простой перевод VB, поскольку в VB "Nothing" немного отличается.

Ответ 2

VB.net:

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

С#:

bool hasNullableParameter = 
        obj.GetType().IsGenericType && 
        obj.GetGenericTypeDefinition().Equals(typeof(Nullable<>));

Ответ 3

Вы можете использовать код, указанный в этом , добавить расширение

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

и скажите

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