बेशक यह कम बुराई है!
यदि आप किसी के खिलाफ जांच नहीं करते हैं, तो अधिकांश मामलों में आपके आवेदन में एक प्रकार की त्रुटि होगी, जिसका अर्थ यह है कि यह संकलित नहीं होगा, इसलिए यह NullReferenceException के साथ क्रैश नहीं हो सकता है (क्योंकि कोई भी शून्य में अनुवाद नहीं करता है) ।
उदाहरण के लिए:
let myObject : option<_> = getObjectToUse() // you get a Some<'T>, added explicit typing for clarity
match myObject with
| Some o -> o.DoSomething()
| None -> ... // you have to explicitly handle this case
यह अभी भी सी # की तरह व्यवहार प्राप्त करने के लिए संभव है, लेकिन यह कम सहज है, के रूप में आप स्पष्ट रूप से कहने के लिए "उपेक्षा है कि इस से कोई भी हो सकता है" है:
let o = myObject.Value // throws NullReferenceException if myObject = None
सी # में, आपको अपने चर के मामले को शून्य के मामले पर विचार करने के लिए मजबूर नहीं किया जाता है, इसलिए यह संभव है कि आप बस चेक करना भूल जाएं। एक ही उदाहरण के रूप में ऊपर:
var myObject = GetObjectToUse(); // you get back a nullable type
myObject.DoSomething() // no type error, but a runtime error
संपादित: स्टीफन Swensen बिल्कुल सही है, मेरे उदाहरण कोड कुछ खामियां थीं, जल्दी में यह लिख रहा था। फिक्स्ड। धन्यवाद!
यह ज़ेन पर एक पुस्तक का शीर्षक हो सकता है! – TechNeilogy
निश्चित रूप से 'प्रकार bool = True | से बेहतर है। झूठा | FileNotFound' – Juliet
यह भी देखें http://stackoverflow.com/questions/3989264/best-explanation-for-languages-without-null – Brian