2016-11-13 32 views
1

在我們的應用程序的深處,有一個嘗試執行從一個字符串轉換爲可空的int與Convert.ChangeType(value, castType)。在這種情況下,值如下:無法將字符串的類型更改爲int?

value: "00010" 
castType: Nullable<System.Int16> 

的問題是,我收到以下錯誤

Invalid cast from 'System.String' to 'System.Nullable`1[[System.Int16} 

我有(顯然不正確地)認爲這是類似於鑄造或Convert.ToInt16 ()但我通過測試以下兩行代碼驗證了它不一樣。

Int16 t = Convert.ToInt16("00010"); 
object w = Convert.ChangeType("00010", typeof(short?)); 

正如您可能會懷疑的那樣,第一次成功,而第二次失敗並出現上述錯誤消息。

是否可以通過調整來使用ChangeType或者我應該查看一個重構?

+0

我最終根據李的信息nk:'Convert.ChangeType(value,Nullable.GetUnderlyingType(castType)?? castType);' – McArthey

回答

2

你需要寫的是這樣的:

var value = "00010"; 
short? w = value == null ? null : (short?)Convert.ChangeType("00010", typeof(short)); 

ChangeType不會Nullable<T>工作 - 如果我們有一個價值value,我們假設我們有一個轉換類型的值

+0

這是有價值的,但是我的類型值是在'typeof(T).GetProperty()。PropertyType'的運行時設置的,所以我不確定如果我可以做一個顯式的轉換 – McArthey

2

根據Convert.ChangeType

ChangeType(Object, Type)方法可以爲null的類型轉換爲另一種類型。但是,即使conversionTypeNullable<T>的基礎類型,它也無法將其他類型轉換爲可爲空的類型的值。 要執行轉換,可以使用鑄造運算符(在C#中)或轉換函數(在Visual Basic中)。

所以,儘量:

var w = (short?)Convert.ChangeType("00010", typeof(short)); 
+0

我完全錯過了粗體部分。謝謝你指出。 – McArthey

相關問題