2013-05-02 72 views
12

我想知道什麼是最好的方式(在更安全和簡潔的意義上)從一個可空類型轉換爲另一個「兼容」可空類型。轉換十進制?加倍?

具體來說,從十進制轉換?加倍?可以使用:

public double? ConvertToNullableDouble(decimal? source) 
{ 
    return source.HasValue ? Convert.ToDouble(source) : (double?) null; 
} 

有沒有更好的方法來做到這一點?也許利用標準轉換?

+0

你的方式是一個好方法。 – SimpleVar 2013-05-02 21:12:32

+1

你做得對!檢查此參考:http://stackoverflow.com/questions/5487685/conversion-between-nullable-types – MUG4N 2013-05-02 21:20:12

回答

22

內置鑄造的勝利!就在VS2012 VS2010測試此:

decimal? numberDecimal = new Decimal(5); 
decimal? nullDecimal = null; 
double? numberDouble = (double?)numberDecimal; // = 5.0 
double? nullDouble = (double?)nullDecimal;  // = null 

只需使用一個明確的投定投空爲null,內部十進制值的兩倍。成功!

+0

測試它,並像一個魅力。謝謝,這就是我正在尋找的東西,但我沒有想到內置的演員。 – 2013-05-02 21:33:10

+0

這很奇怪,因爲像MUG4N這樣的問題似乎很多人都有理論,但實際上沒有人試過*。 :) – 2013-05-02 21:35:00

+2

事實上*涉及非空值類型源和目標的所有*轉換可能會被「提升爲空」。 – 2013-05-03 05:52:23

1

在一般情況下,如果你想Ø從任何數據類型的其他轉換,只要是兼容的,使用此:

Convert.ChangeType(your variable, typeof(datatype you want convert to)); 

例如:

string str= "123"; 
    int value1 = (int)Convert.ChangeType(str, typeof(int)); 
    float? value2 = (float?)Convert.ChangeType(str, typeof(float)); 
    ................................... 

得遠一點,如果你想讓它更安全,你可以試試看:

string str= "123"; 
try 
{ 
    int value1 = (int)Convert.ChangeType(str, typeof(int)); 
    int? value2 = (int?)Convert.ChangeType(str, typeof(int)); 
    float value3 = (float)Convert.ChangeType(str, typeof(float)); 
    float? value4 = (float?)Convert.ChangeType(str, typeof(float)); 
} 
catch(Exception ex) 
{ 
    // do nothing, or assign a default value 
} 

這是在VS 20下測試的10

+0

是的,這是在類型之間轉換的更一般的方式,並不像接受的答案那麼簡潔。 @Giswin它是否也適用於可空行?我想是這樣,但我沒有找到[文件]在這個特定的評論(http://msdn.microsoft.com/en-us/library/dtb69x08.aspx)。 – 2013-05-02 21:35:55

+0

你可以使用這個: 十進制? v1 = 222; double? V2 =(double?)Convert.ChangeType(v1,typeof(double)); 但如果v1爲null,則Convert.ChangeType將引發異常。然後嘗試趕上左邊的工作。 – Gisway 2013-05-02 21:51:26