2009-10-10 10 views
5

तो मैं निम्नलिखित की तरह कुछ कोड है:मुझे इस कोड को एक कलाकार में छोटा करने की आवश्यकता क्यों है?

short myShortA = 54; 
short myShortB = 12; 
short myShortC = (short)(myShortA - myShortB); 

दोनों ऑपरेंड रहे शॉर्ट्स और यह एक छोटी में जा रहा है तो मैं क्यों यह कास्ट करने के लिए क्या है?

उत्तर

11

क्योंकि कोई "शॉर्ट-शॉर्ट" ऑपरेटर नहीं है। दोनों ऑपरेटरों को int में पदोन्नत किया जाता है।

सी # 3 कल्पना की धारा 7.7.5 से:

पूर्वनिर्धारित घटाव ऑपरेटरों नीचे सूचीबद्ध हैं। ऑपरेटर सभी एक्स से y घटाएं।

  • पूर्णांक घटाव:

    int operator –(int x, int y); 
    uint operator –(uint x, uint y); 
    long operator –(long x, long y); 
    ulong operator –(ulong x, ulong y); 
    

    एक जाँच संदर्भ में, अगर अंतर परिणाम प्रकार की श्रेणी से बाहर है, एक System.OverflowException फेंक दिया है।

    public static class NumericExtensions 
    { 
        public static short Subtract(this short target, short value) 
        { 
         return (short)(target - value); 
        } 
    } 
    

    दूसरों का जवाब दे दिया:

(। और फिर वहाँ चल रहा है बिंदु घटाव)

+0

यदि केवल वे एक्सटेंशन ऑपरेटर की अनुमति देते हैं ...;) – RCIX

+1

एरिक लिपर्ट ने इस पर टिप्पणी की (Enums के संबंध में) : http://blogs.msdn.com/ericlippert/archive/2005/10/19/fyi-c-2-0-has-a-breaking-change-in-enum-subtraction.aspx – jasonh

+0

मैंने अक्सर कामना की है यह कुछ भाषाओं में ... लेकिन फिर मुझे याद है कि कितने लोग इसके बाहर बिल्ली का दुरुपयोग करेंगे। –

1

बातें एक छोटा सा आसान बनाने के लिए, आप बस इस तरह एक विस्तार विधि लिख सकता है आपका प्रश्न ... :)

संबंधित मुद्दे