有沒有辦法比較C#中的可空和不可空的泛型?C#比較本機類型與可爲空類型(Int32與Int32?)
例如:
public void function<T>()
{
Type t = sqlreader.GetValue(pos).GetType();
}
其中t
是Int32
類型的,並且是T
Nullable<Int32>
類型。
我們如何比較t
和T
,使其返回true
?
有沒有辦法比較C#中的可空和不可空的泛型?C#比較本機類型與可爲空類型(Int32與Int32?)
例如:
public void function<T>()
{
Type t = sqlreader.GetValue(pos).GetType();
}
其中t
是Int32
類型的,並且是T
Nullable<Int32>
類型。
我們如何比較t
和T
,使其返回true
?
致電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)
這是相當不清楚你想要做什麼,而是你可以能夠只使用Nullable.getUnderlyingType
:
if (t == Nullable.GetUnderlyingType(typeof(T)))