2015-11-04 149 views
1

Iam被.Net的ChangeType方法困惑。我寫了一個擴展方法來轉換預期類型的​​對象值(來自我的例子中的數據庫)。只要不使用可爲空的類型,這個工作很好。C#Convert.ChangeType無法將int轉換爲System.Nullable

蔭做這個至今:

public static T ConvertTo<T>(this object value) 
{ 
    T returnValue = default(T); 

    if ((value != null) && 
     (value != DBNull.Value)) 
    { 
    returnValue = (T)Convert.ChangeType(value, typeof(T)); 
    } 

    return returnValue; 
} 

如果我叫:

int test = myObject.ConvertTo<int>(); 

蔭得到int值或者0,如果myObject的不包含INT。 因爲它可以做到以下幾點:

int? test = 5; 

我想是沒有問題蒙上了INT爲int?但如果我打電話給:

int? test = myObject.ConvertTo<int?>(); 

Iam正在獲取System.InvalidCastException。無效從System.Int32轉換爲System.Nullable`1

異常在Convert.ChangeType行中引發。

有人知道爲什麼嗎?

+0

http://stackoverflow.com/questions/3531318/convert-changetype-fails-on-nullable-types – tdgtyugdyugdrugdr

回答

1

因爲int?Nullable<int>的縮寫,與int不同。這些是.Net中的兩種不同類型。如果你想將int?轉換成int,反之亦然,你必須手動完成。

編輯

從雙到INT轉化率定義,而從空類型到正常數值類型轉換不是。

+1

問題不在於它們是兩種不同的類型。如果你用'double'做了它,儘管'double'和'int'是不同的類型,它將工作。問題是沒有定義'int'到'Nullable '的轉換。你是對的,在這種情況下,代碼需要被編寫來做轉換。 – Chris