2009-04-29 66 views
3

我使用反射來獲取值了匿名類型:C#反映物業類型

object value = property.GetValue(item, null); 

當標的值是可空類型(?T),我怎麼能當得到基本類型值爲空?

鑑於

int? i = null; 

type = FunctionX(i); 
type == typeof(int); // true 

尋找FunctionX()。希望這是有道理的。謝謝。

回答

6

你可以做這樣的事情:

if(type.IsgenericType) 
{ 
    Type genericType = type.GetGenericArguments()[0]; 
} 

編輯: 一般用途:

public Type GetTypeOrUnderlyingType(object o) 
{ 
    Type type = o.GetType(); 
    if(!type.IsGenericType){return type;} 
    return type.GetGenericArguments()[0]; 
} 

用法:

int? i = null; 

type = GetTypeOrUnderlyingType(i); 
type == typeof(int); //true 

這對於任何通用類型的工作,不只是可空。

+0

有什麼辦法可以使這個非常普遍的目的?如何處理一個空字符串?我還能找回一個字符串嗎? – andleer 2009-04-29 15:54:42

2

如果您知道這是Nullable<T>,您可以使用Nullable中的靜態幫助GetUnderlyingType(Type)

int? i = null; 

type = Nullable.GetUnderlyingType(i.GetType()); 
type == typeof(int); // true