2012-11-15 2 views
14

switch में, यदि हम default के बजाय कोई शब्द या एकल अक्षर लिखते हैं तो यह कोई त्रुटि नहीं फेंकता है। उदा।स्विच केस में यदि हम किसी भी शब्द या एकल अक्षर के रूप में "डिफ़ॉल्ट" लिखते हैं तो यह

switch(10) 
{ 
    case 1: 
    break; 

    hello: 
    break; 
} 

यह त्रुटि को फेंकने के बिना चलता है।

क्या कोई यह समझा सकता है कि यह कैसे काम करता है?

+3

मुझे पुराने मजाक/चाल की याद दिलाता है: सी-शैली भाषाएं यूआरएल समझती हैं! आप अपनी साइट पर कहीं भी http: // www.google.com/'पेस्ट कर सकते हैं! = P – Izkata

उत्तर

15

यह संकलित है क्योंकि hello: एक लेबल है और इस प्रकार goto का गंतव्य हो सकता है। जब मैंने संकलित किया तो मुझे एक अपरिवर्तित लेबल के बारे में चेतावनियां मिलीं (क्योंकि मेरे पास कोई गोटो नहीं था)

यहां एक उदाहरण है जिसे आप LINQPad में फेंक सकते हैं - आप देखेंगे कि यह दोनों "1" और "हैलो" प्रिंट करता है:

switch(1) 
{ 
    case 1: 
     "1".Dump(); 
     goto hello; 
    break; 

    hello: 
     "hello".Dump(); 
     break; 
} 
12

यह switch कथन से संबंधित नहीं है। यह एक लेबल पहचानकर्ता है (खराब अभ्यास होने के कारण शायद ही कभी इस्तेमाल किया जाता है) goto statement

switch (10) 
{ 
    case 1: 
     break; 

    hello: 
     Console.Write("In hello label"); 
     break; 
    case 2: 
     goto hello; 
     break; 
} 

आप ऊपर स्विच बयान में गोटो बयान के लिए एक लेबल को परिभाषित कर रहे हैं:

goto something2; 
something1: 
    Console.WriteLine("world"); 
    goto done; 
something2: 
    Console.WriteLine("hello"); 
goto something1; 
done: 
5
अपने उदाहरण आप निम्नलिखित कोड का टुकड़ा देख सकते हैं के लिए

। यदि स्विच स्टेटमेंट case 2 पर आता है, तो यह लेबल hello पर जाएगा। चूंकि आपके मूल कोड स्निपेट में goto hello; नहीं है, इसलिए आपको एक अनिर्धारित लेबल की चेतावनी मिलेगी।

आपका लेबल hello स्विच स्टेटमेंट (अंदर परिभाषित किए गए को छोड़कर) के साथ कुछ भी करने की ज़रूरत नहीं है।

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