我想知道什麼是最好的方式(在更安全和簡潔的意義上)從一個可空類型轉換爲另一個「兼容」可空類型。轉換十進制?加倍?
具體來說,從十進制轉換?加倍?可以使用:
public double? ConvertToNullableDouble(decimal? source)
{
return source.HasValue ? Convert.ToDouble(source) : (double?) null;
}
有沒有更好的方法來做到這一點?也許利用標準轉換?
我想知道什麼是最好的方式(在更安全和簡潔的意義上)從一個可空類型轉換爲另一個「兼容」可空類型。轉換十進制?加倍?
具體來說,從十進制轉換?加倍?可以使用:
public double? ConvertToNullableDouble(decimal? source)
{
return source.HasValue ? Convert.ToDouble(source) : (double?) null;
}
有沒有更好的方法來做到這一點?也許利用標準轉換?
內置鑄造的勝利!就在VS2012 和 VS2010測試此:
decimal? numberDecimal = new Decimal(5);
decimal? nullDecimal = null;
double? numberDouble = (double?)numberDecimal; // = 5.0
double? nullDouble = (double?)nullDecimal; // = null
只需使用一個明確的投定投空爲null,內部十進制值的兩倍。成功!
測試它,並像一個魅力。謝謝,這就是我正在尋找的東西,但我沒有想到內置的演員。 – 2013-05-02 21:33:10
這很奇怪,因爲像MUG4N這樣的問題似乎很多人都有理論,但實際上沒有人試過*。 :) – 2013-05-02 21:35:00
事實上*涉及非空值類型源和目標的所有*轉換可能會被「提升爲空」。 – 2013-05-03 05:52:23
在一般情況下,如果你想Ø從任何數據類型的其他轉換,只要是兼容的,使用此:
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
是的,這是在類型之間轉換的更一般的方式,並不像接受的答案那麼簡潔。 @Giswin它是否也適用於可空行?我想是這樣,但我沒有找到[文件]在這個特定的評論(http://msdn.microsoft.com/en-us/library/dtb69x08.aspx)。 – 2013-05-02 21:35:55
你可以使用這個: 十進制? v1 = 222; double? V2 =(double?)Convert.ChangeType(v1,typeof(double)); 但如果v1爲null,則Convert.ChangeType將引發異常。然後嘗試趕上左邊的工作。 – Gisway 2013-05-02 21:51:26
你的方式是一個好方法。 – SimpleVar 2013-05-02 21:12:32
你做得對!檢查此參考:http://stackoverflow.com/questions/5487685/conversion-between-nullable-types – MUG4N 2013-05-02 21:20:12