2013-05-02 28 views
12

NULL türünden başka bir "uyumlu" null türüne dönüştürmenin en iyi yolunun (daha güvenli ve özlü anlamda) ne olacağını merak ediyorum.Ondalık dönüştürme ikiye mi?

Özellikle ondalıktan dönüştürmek? ikiye mi? Kullanılarak yapılabilir:

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

Bunu yapmanın daha iyi bir yolu var mı? Belki standart bir dönüşümden faydalanmak ister misiniz?

+0

Yolunuz iyi bir yoldur. – SimpleVar

+1

Doğru yapıyorsun! Bu referansı da kontrol edin: http://stackoverflow.com/questions/5487685/conversion-between-nullable-types – MUG4N

cevap

22

Kazanmak için kadrolar hazır! Sadece VS2012 ve VS2010 bu test:

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

Sadece null boş kullanacaklar açık döküm ve ikiye katlamak için iç ondalık değer kullanılarak. Başarı! Genelde

+0

Test edildi ve bir çekicilik gibi çalışıyor. Teşekkürler, bu aradığım şeydi, ama yerleşik bir oyuncu düşünmedim. –

+0

Bu garip, çünkü ona bağlı bir MUG4N gibi sorularda birçok insanın teori var gibi görünüyor, ama aslında hiç kimse denemedi *. :) –

+2

Aslında null olmayan bir değer türü kaynağı ve hedefi içeren tüm * dönüşümler "null için kaldırılabilir" olabilir. –

1

, sen yeter ki uyumlu gibi diğer herhangi bir veri türünden o dönüştürmek istiyorsanız, bunu kullanın: Daha

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

Biraz: Örneğin

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

Eğer daha güvenli olmasını istiyorsanız, bunu bir deneyin catch ekleyebilirsiniz:

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 
} 

bu VS 20 altında test edilir 10

+0

Evet, bu, kabul edilen cevap olarak kısa bir özüm olarak değil, türler arasında dönüşüm yapmanın daha genel bir yoludur. @Giswin Nullables için de işe yarıyor mu? Sanırım öyle, ama bu konuda [belge] 'de belirli bir yorum bulamadım (http://msdn.microsoft.com/en-us/library/dtb69x08.aspx). –

+0

bunu kullanabilirsiniz: ondalık? v1 = 222; çift? V2 = (çift?) Convert.ChangeType (v1, typeof (double)); ancak v1 boşsa, Convert.ChangeType bir istisna atar. ve sonra deneyin dozu sol işi deneyin. – Gisway

İlgili konular