IEnumerable<T>है सह संस्करण , लेकिन यह मान प्रकार, बस केवल संदर्भ के प्रकार का समर्थन नहीं करता। नीचे दिया गया सरल कोड सफलतापूर्वक संकलित किया गया है:
IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;
लेकिन से बदल रहा है stringकरने के लिए intसंकलित त्रुटि प्राप्त होगी:
IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;
MSDN में इसका कारण बताया गया है :
विविधता केवल संदर्भ प्रकारों पर लागू होती है; यदि आप वैरिएंट प्रकार पैरामीटर के लिए एक मान प्रकार निर्दिष्ट करते हैं, तो उस प्रकार का पैरामीटर परिणामी प्रकार के लिए अपरिवर्तनीय है।
मैंने खोज की है और पाया है कि कुछ प्रश्नों का उल्लेख कारण मूल्य प्रकार और संदर्भ प्रकार के बीच बॉक्सिंग है । लेकिन यह अभी भी मेरे दिमाग को साफ नहीं करता है कि मुक्केबाजी का कारण क्या है?
क्या कोई कृपया एक सरल और विस्तृत विवरण दे सकता है कि सहसंयोजक और विरोधाभासी मूल्य प्रकार का समर्थन क्यों नहीं करते हैं और मुक्केबाजी कैसे प्रभावित करती है?