अभिव्यक्ति Convert.ToInt32(String.Empty)
एक प्रारूप अपवाद उठाएगा क्योंकि यह एक इंट 32 मान में खाली स्ट्रिंग को पार्स नहीं कर सकता है।कन्वर्ट। TInt32 (स्ट्रिंग) String.Empty बनाम नल
हालांकि, सी # में VB.NET या Convert.ToInt32((string)null)
में Convert.ToInt32(DirectCast(Nothing, String))
अभिव्यक्ति शून्य के इंट 32 मान पर शून्य को पार्स करेगी।
Convert.cs
में नेट स्रोत में खुदाई, मैं निम्नलिखित कोड देखें:
public static int ToInt32(String value) {
if (value == null)
return 0;
return Int32.Parse(value, CultureInfo.CurrentCulture);
}
यह व्यवहार बताते हैं, लेकिन मैं समझता हूँ कि क्यों यह इस तरह से लिखा गया था चाहते हैं, बजाय एक शून्य लौटने का एक खाली स्ट्रिंग के लिए भी?
उदाहरण के लिए, यह क्यों नहीं लिखा गया था के रूप में:
public static int ToInt32(String value) {
if (String.IsNullOrEmpty(value))
return 0;
return Int32.Parse(value, CultureInfo.CurrentCulture);
}
(ध्यान दें कि String.IsNullOrEmpty()
और Convert.ToInt32()
दोनों वापस .NET 2.0, संभवतः पहले की तारीख।)
संपादित करें: मेरा प्रश्न this question के समान है, लेकिन मुझे यह भी जानना है कि Convert.ToInt32(String.Empty)
0
के Int32 डिफ़ॉल्ट मान को वापस करने के बजाय अपवाद उठाता है। (उत्तर जा रहा है कि String.Empty
String
का डिफ़ॉल्ट मान नहीं है, इसलिए वहाँ कोई संबंध है।)
नल को डेटा की अनुपस्थिति के रूप में देखा जा सकता है - जबकि एक खाली स्ट्रिंग * एक स्ट्रिंग है, केवल एक खाली है ... और यह कोई संख्या नहीं है। (व्यक्तिगत रूप से मैं इसे शून्य के साथ इतना लचीला नहीं होना चाहूंगा, लेकिन यह एक अलग मामला है।) –
दिलचस्प प्रश्न के लिए +1। मैं उम्मीद करता था कि यह एक अपवाद फेंकने की तरह होगा, बस "" गुजरने की तरह। * विशेष रूप से * जब Int32.Parse (शून्य) एक अपवाद फेंकता है! (ठीक है, ठीक है, यह कनवर्टिंग और पार्सिंग के बीच सूक्ष्म अंतर है - लेकिन यहां तक कि ...) –
यदि आप वास्तव में इस प्रकार के प्रश्न के साथ अपने दिमाग को उड़ाना चाहते हैं तो SQL 'NULL' बनाम C#' null' की तुलना करें और अनुबंध करें। –