C#比较本机类型和可空类型(Int32与Int32?)

时间:2011-07-20 13:20:53

标签: c# generics types nullable

有没有办法在C#中比较可空和非可空的泛型?

例如:

public void function<T>()
{
    Type t = sqlreader.GetValue(pos).GetType();
}

其中t的类型为Int32,而T的类型为Nullable<Int32>

我们如何比较tT,使其返回true

2 个答案:

答案 0 :(得分:8)

目前还不清楚你要做什么,但可能只能使用Nullable.getUnderlyingType

if (t == Nullable.GetUnderlyingType(typeof(T)))

答案 1 :(得分:6)

致电Nullable.GetUnderlyingType(t) 如果tNullable<X>,则会返回typeof(X);否则,它将返回null

因此,你可以写

t = Nullable.GetUnderlyingType(t) ?? t;
Type bigT = Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T);

if (t == bigT)