2013-05-02 8 views
12

मैं सोच रहा हूं कि एक निरर्थक प्रकार से दूसरे "संगत" शून्य प्रकार में परिवर्तित करने के लिए सबसे अच्छा तरीका (सुरक्षित और संक्षिप्त के अर्थ में) क्या होगा।दशमलव कनवर्ट करें? दोगुना करने के लिए?

विशेष रूप से, दशमलव से कनवर्ट करना? दोगुना करने के लिए? का उपयोग कर किया जा सकता है:

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

क्या ऐसा करने का कोई बेहतर तरीका है? शायद एक मानक रूपांतरण का लाभ उठा रहे हैं?

+0

आपका रास्ता एक अच्छा तरीका है। – SimpleVar

+1

आप इसे सही कर रहे हैं! यह संदर्भ भी देखें: http://stackoverflow.com/questions/5487685/conversion-between-nullable-types – MUG4N

उत्तर

22

जीत के लिए कलाकारों में निर्मित! बस VS2012 और VS2010 में इस परीक्षण किया:

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

बस एक स्पष्ट डाली अशक्त करने के लिए अशक्त डाली जाएगी, और आंतरिक दशमलव मान दोगुना करने के लिए इस्तेमाल करते हैं। सफलता!

+0

इसका परीक्षण किया और एक आकर्षण की तरह काम करता है। धन्यवाद, यह वही था जो मैं खोज रहा था लेकिन मैंने एक निर्मित कलाकार के बारे में नहीं सोचा था। –

+0

यह अजीब बात है, क्योंकि एक एमयूजी 4 एन से जुड़े प्रश्नों में ऐसा लगता है कि बहुत से लोगों के सिद्धांत हैं, लेकिन वास्तव में कोई भी * कोशिश नहीं की गई *। :) –

+2

असल में * सभी * रूपांतरण जिनमें गैर-शून्य मूल्य प्रकार स्रोत और लक्ष्य शामिल है "को हटाने योग्य" हो सकता है। –

1

सामान्य तौर पर, यदि आप अन्य के लिए किसी भी डेटा प्रकार से ओ परिवर्तित जब तक वे संगत हैं चाहते हैं, यह का उपयोग करें:

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

थोड़ा सा आगे:

Convert.ChangeType(your variable, typeof(datatype you want convert to)); 
उदाहरण के लिए

, अगर आप इसे और अधिक सुरक्षित हो करना चाहते हैं, आप उस पर एक कोशिश पकड़ जोड़ सकते हैं:

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 
} 

इस वी.एस. 20 के तहत परीक्षण किया जाता है 10

+0

हां, यह प्रकारों के बीच रूपांतरित करने का एक और सामान्य तरीका है, स्वीकृत उत्तर के रूप में संक्षिप्त नहीं है। @ गिस्विन क्या यह नलिकाओं के लिए भी काम करता है? मुझे ऐसा लगता है, लेकिन मुझे [दस्तावेज़ीकरण] (http://msdn.microsoft.com/en-us/library/dtb69x08.aspx) में इस पर एक विशिष्ट टिप्पणी नहीं मिली है। –

+0

आप इसका उपयोग कर सकते हैं: दशमलव? v1 = 222; डबल? वी 2 = (डबल?) कनवर्ट करें। चेंजटाइप (v1, टाइपऑफ (डबल)); लेकिन यदि v1 शून्य है, तो कनवर्ट करें। चेंजटाइप अपवाद फेंक देगा। और फिर कोशिश करें बाएं नौकरी खुराक पकड़ो। – Gisway

संबंधित मुद्दे