2012-05-24 127 views
1

什麼將是最好的方式來實現這個方法:如何從一個類型對象獲取可空類型對象

Type GetNullableTypeFromType(Type tp); 

使

Type tpString = GetNullableTypeFromType(typeof(string)); // Returns typeof(string) 
Type tpInt = GetNullableTypeFromType(typeof(int)); // Returns typeof(int?) 

回答

10
public static Type GetNullableType(Type t) 
{ 
    if (t.IsValueType && (Nullable.GetUnderlyingType(t) == null)) 
     return typeof(Nullable<>).MakeGenericType(t); 
    else 
     return t; 
} 
+1

我之間添加此您兩行,以便'GetNullableType(typeof(int?))'將工作(返回'int?'):'else if(t.IsGenericType && t.GetGenericTypeDefinition()== typeof(Nullable <>))return t;'' 。此外,通過'typeof(Nullable <>)'傳遞給你相同的類型。 –

+0

好點,我沒有考慮過那個。 –

+2

如果將它傳遞給接口,這仍然會失敗。你可以通過改變方法體來使它更健壯:'if(t.IsValueType &&(Nullable.GetUnderlyingType(t)== null))return typeof(Nullable <>)。MakeGenericType(t);返回t;' – LukeH