有没有办法在C#中比较可空和非可空的泛型?
例如:
public void function<T>()
{
Type t = sqlreader.GetValue(pos).GetType();
}
其中t
的类型为Int32
,而T
的类型为Nullable<Int32>
。
我们如何比较t
和T
,使其返回true
?
答案 0 :(得分:8)
目前还不清楚你要做什么,但可能只能使用Nullable.getUnderlyingType
:
if (t == Nullable.GetUnderlyingType(typeof(T)))
答案 1 :(得分:6)
致电Nullable.GetUnderlyingType(t)
如果t
是Nullable<X>
,则会返回typeof(X)
;否则,它将返回null
。
因此,你可以写
t = Nullable.GetUnderlyingType(t) ?? t;
Type bigT = Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T);
if (t == bigT)