पर अनावश्यक रूपांतरण बाइट्स और शॉर्ट्स के साथ काम करते समय अभिव्यक्ति के पेड़ एक अनावश्यक रूपांतरण बनाने लगते हैं, वे दोनों पक्षों (उदाहरण के लिए बाइनरी अभिव्यक्तियों में) int32 में परिवर्तित करते हैं।अभिव्यक्ति पेड़ - int32
यह मैंने देखा है कि कुछ लिंक प्रदाताओं में यह एक मुद्दा है, प्रत्येक को मूल अभिव्यक्ति प्राप्त करने के लिए इस अनावश्यक परत को छीलना है। (NHibernate इस परत को नहीं हटाता है और SQL क्वेरी में एक भयानक CAST बनाता है)।
// no conversion
Console.WriteLine((Expression<Func<int, int, bool>>) ((s, s1) => s == s1));
// converts to int32
Console.WriteLine((Expression<Func<short, short, bool>>) ((s, s1) => s == s1));
// converts to int32
Console.WriteLine((Expression<Func<byte, byte, bool>>) ((s, s1) => s == s1));
आप एक अभिव्यक्ति है कि इस सटीक तुलना (रूपांतरण के बिना) बनाता है बनाने की कोशिश करते हैं, तो आप सफल होगा।
तो सवाल यह है कि, इस व्यवहार का कारण क्या है?
संपादित .net 4.0 64 बिट, एक ही 4.5 64 बिट
सी # कंपाइलर का कौन सा संस्करण आप काम कर रहे हैं? इस चरण में मेरा एकमात्र अनुमान इस पंक्ति के साथ होगा कि 'int' समानता .NET में आदिम संचालन में एक निर्माण है जिसे केवल' int 'के लिए परिभाषित किया गया है (छोटे प्रकार के मूल्यांकन स्टैक पर मौजूद नहीं हो सकते हैं) और यह किसी भी तरह कारक है यहाँ। –