Определите, является ли общий параметр нулевым типом
У меня есть следующая функция VB.NET, например:
Public Function MyFunction (Of TData) (ByVal InParam As Integer) As TData
End Sub
Как в функции определить, является ли TData
NULLable Type?
Ответы
Ответ 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();