क्या आपने कभी Convert.ChangeType()
विधि का उपयोग Nullable<T>
प्रकार में परिवर्तित करने के लिए किया है? अजीब बात यह है कि यह InvalidCastException
फेंक देगा कि "शून्य ऑब्जेक्ट को किसी मान प्रकार में परिवर्तित नहीं किया जा सकता"।क्यों Nullable <T> एक मूल्य प्रकार माना जाता है?
अपने तत्काल खिड़की पर इस चलाने की कोशिश करें: ?System.Convert.ChangeType(null, typeof(int?))
कुछ अस्पष्ट कारण से, Nullables माना जाता है मूल्य प्रकार के। उदाहरण के लिए, typeof(int?).IsValueType
true
देता है।
मेरे लिए, Nullable<T>
null
स्वीकार करते हैं, यह एक वर्ग प्रकार है, मूल्य प्रकार नहीं। क्या किसी को पता है कि यह अलग-अलग क्यों लागू होगा?
अजीब मुक्केबाजी व्यवहार को समझने में कुछ समय लगता है - लेकिन मुझे खुशी है कि यह वही तरीका है; अन्यथा 'Nullable' (जो मान पास पारदर्शिता से आता है) के मूल्य का अधिकतर खो जाएगा। –
LBushkin
असल में, मुक्केबाजी व्यवहार एक बदलाव था जो .NET 2.0 के विकास चक्र में देर से हुआ था। शुरुआती बीटा में, 'Nullable' एक साधारण संरचना थी। अभ्यास में जब आप असल में मूल्यों को संग्रहीत करने के लिए वास्तव में उपयोग करने योग्य प्रकारों का उपयोग करते हैं, तो मुझे भी लगता है कि यह व्यवहार अधिक प्राकृतिक है। –
रास्ते में बढ़िया जानकारी शामिल है – Nick