我有以下VB.NET功能,例如:
Public Function MyFunction (Of TData) (ByVal InParam As Integer) As TData
End Sub
如何在函数中确定TData
是否为NULLable类型?
答案 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();