2010-05-17 21 views
6

मुझे पता है कि स्ट्रिंग "0" को बूलियन में कनवर्ट करने का प्रयास विफल हो जाएगा, मुझे यह भी पता चलेगा कि जॉन स्काईट्स अन्य सवालों के जवाब देने के लिए धन्यवाद।कनवर्ट क्यों करता है। टोबोलियन ("0") असफल हो जाता है?

मैं क्या जानना चाहता हूं कि सी # को बूलियन रूपांतरण के लिए वैध इनपुट के रूप में "0" क्यों नहीं पहचानता है, निश्चित रूप से आप इसे 0 = झूठी, 1 = सत्य, या यहां तक ​​कि -1 = झूठी और 0 = सच है, वैसे भी, मेरा तर्क मुझे बताता है कि यह एक वैध इनपुट हो सकता है, तो क्या इसका कोई अच्छा कारण नहीं है? मेरी शर्त पुरानी vb6 स्ट्रिंग इनपुट "0" को मान्य के रूप में पहचानने में सक्षम होगी।

+0

यहां रुचि रखने वालों के लिए कनवर्ट करने का सही तरीका है - http://stackoverflow.com/questions/2606406/convert-toboolean1-throws-system-format-exception-in-c –

+2

आप इसका भी उपयोग कर सकते हैं: सिस्टम .Xml.XmlConvert.ToBoolean (स्ट्रिंग), जो "0" और "1" स्वीकार करता है। –

+1

ध्यान रखें कि 'XmlConvert' को "सत्य" और "झूठी" पूरी तरह से लोअरकेस होने की आवश्यकता है। –

उत्तर

8

क्योंकि है कि सरल जवाब है जिस तरीके से विधि परिभाषित की गई है। हालांकि, सी # 0 में false का मूल्यांकन नहीं करता है, इसलिए यह आश्चर्यजनक होगा कि "0" को कनवर्ट का उपयोग करके गलत में परिवर्तित किया जाना था।

+0

बहुत रोचक, तो एक कनवर्ट। ToBoolean (Convert.ToInt16 ("0")) भी असफल हो जाएगा? –

2

मूल्य के साथ एक स्ट्रिंग हमेशा सत्य और यहां तक ​​कि एक खाली स्ट्रिंग पर वापस आ जाएगी।

+0

यह क्यों है, क्या आप कृपया थोड़ा और विस्तार से समझा सकते हैं? –

+0

यदि आपको वास्तव में उस एल्गोरिदम कार्य को करने की आवश्यकता है, तो आप int.TryParse ("0", आउट i) का उपयोग कर सकते हैं; फिर कनवर्ट करें कि मैं बूलियन –

2

मेरा अनुमान यह होगा कि ऐसा इसलिए है क्योंकि सी प्रोग्रामर एक .NET भाषा में आ रहा है, भ्रमित हो सकता है, क्योंकि सी में चरित्र '0' की सीधी कलाकार "सत्य" का मूल्यांकन करेगी, जबकि चरित्र '0 'झूठी "का मूल्यांकन करेगा।

(इसका कारण यह है अशक्त चरित्र वास्तव में शून्यों का बाइट भरा हुआ है, और '0' चरित्र एक अशून्य ASCII/यूनिकोड आदि है/नहीं है।)

+0

भाषा शुद्धता के साथ कुछ भी कर सकता हूं? –

+0

मुझे लगता है कि यह भविष्यवाणी के बारे में और कुछ और की तुलना में रूढ़िवादी होने के बारे में अधिक है। –

2

यह बहुत सीधी आगे है, कनवर्ट करें। टोबोलियन (स्ट्रिंग) बुलीयन को कॉल करता है। ट्राईपर्स()। जो केवल "सच" या "गलत" स्वीकार करता है। यदि आप विकल्पों को विस्तृत करना चाहते हैं तो आप कर सकते हैं, .NET भाषाएं हैं जिनमें अधिक लचीली प्रकार की प्रणाली है। यह अच्छी तरह से नेट ढांचे द्वारा समर्थित है:

bool b = (bool)Microsoft.VisualBasic.CompilerServices.Conversions.ToBoolean("0"); 

लिए MSDN ऊपर दिए लिंक पर इस विधि में कनवर्ट करने के लिए एक तार्किक मान की निर्दिष्ट स्ट्रिंग प्रतिनिधित्व अनुसार Microsoft.VisualBasic.dll के लिए एक संदर्भ जोड़ें

+0

यह शायद ही कोई सहायक टिप्पणी है? – Karlth

+1

आप सही हैं, आपकी टिप्पणी सहायक नहीं थी। –

+0

तो मैंने कहा होगा "** यह ** शायद ही कोई सहायक टिप्पणी है"। :) – Karlth

0

http://msdn.microsoft.com/en-us/library/86hw82a3.aspx
इसके बूलियन समकक्ष।

public static bool ToBoolean(
    string value 
) 

पैरामीटर

मूल्य प्रकार: System.String एक स्ट्रिंग है कि या तो Boolean.TrueString या Boolean.FalseString का मान है। रिटर्न वैल्यू

टाइप: सिस्टम.बोलियन सत्य यदि मान TrueString के बराबर है, या गलत है तो मान FalseString या शून्य के बराबर है। अपवाद

1

इसी कारण से निम्न कोड संकलित नहीं होगा।

bool value = 0; 
//error CS0031: Constant value '0' cannot be converted to a 'bool' 
0

जब भी आप एक पैरामीटर के रूप में "0" देना यह है कि एक स्ट्रिंग मान के रूप में मानता है। और स्ट्रिंग को बूल में परिवर्तित नहीं किया जा सकता है इससे कोई फर्क नहीं पड़ता कि यह 0 या 1 है।

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