4
ทำไมความแปรปรวนร่วมและความแปรปรวนไม่สนับสนุนประเภทค่า
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 : ความแปรปรวนใช้กับประเภทอ้างอิงเท่านั้น หากคุณระบุประเภทค่าสำหรับพารามิเตอร์ประเภทตัวแปรพารามิเตอร์ประเภทนั้นจะไม่เปลี่ยนแปลงสำหรับชนิดที่สร้างขึ้นที่เกิดขึ้น ฉันค้นหาและพบว่าบางคำถามที่กล่าวถึงเหตุผลคือการชกมวยระหว่างประเภทค่าและประเภทการอ้างอิงมวยระหว่างชนิดของมูลค่าและประเภทของการอ้างอิงแต่มันยังไม่ชัดเจนในใจฉันมากนักว่าทำไมการชกมวยถึงเป็นเหตุผล? ใครช่วยกรุณาให้คำอธิบายที่เรียบง่ายและมีรายละเอียดว่าทำไมความแปรปรวนร่วมและความแตกต่างไม่สนับสนุนประเภทของค่าและการชกมวยมีผลต่อเรื่องนี้อย่างไร?