C # сравнить нативный тип с обнуляемым типом (Int32 с Int32?) - PullRequest
1 голос
/ 20 июля 2011

Есть ли способ сравнить обнуляемые и ненулевые обобщения в C #?

Например:

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

, где t имеет тип Int32 и Tимеет тип Nullable<Int32>.

Как мы можем сравнить t и T так, чтобы он возвращал true?

Ответы [ 2 ]

8 голосов
/ 20 июля 2011

Довольно непонятно, что вы пытаетесь сделать, но вы можете иметь возможность просто использовать Nullable.getUnderlyingType:

if (t == Nullable.GetUnderlyingType(typeof(T)))
6 голосов
/ 20 июля 2011

Call 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) 
...