c# - एक सी#स्विच स्टेटमेंट में परिवर्तनीय घोषणा




switch-statement (5)

क्योंकि उनका दायरा स्विच ब्लॉक पर है। सी # भाषा विशिष्टता निम्नलिखित बताती है:

स्विच ब्लॉक में स्थानीय चर या निरंतर घोषित स्थिरता का दायरा स्विच ब्लॉक है।

ऐसा क्यों है कि एक सी # स्विच स्टेटमेंट में, कई मामलों में उपयोग किए जाने वाले चर के लिए, आप केवल इसे पहले मामले में घोषित करते हैं?

उदाहरण के लिए, निम्नलिखित त्रुटि फेंकता है "एक स्थानीय चर नाम 'चर' पहले से ही इस दायरे में परिभाषित किया गया है"।

switch (Type)
{
    case Type.A:
            string variable = "x";
                break;
    case Type.B:
            string variable = "y";
                break;
}

हालांकि, तर्क के अनुसार, टाइप प्रकार टाइप होने पर प्रारंभिक घोषणा को हिट नहीं किया जाना चाहिए। एक स्विच स्टेटमेंट के भीतर सभी चर एक एकल दायरे में मौजूद हैं, और क्या वे किसी भी तर्क को संसाधित करने से पहले बनाए / आवंटित किए जाते हैं?


चर सी # कंपाइलर में स्कोप साझा करते हैं। हालांकि, CIL में उसी तरह का दायरा मौजूद नहीं है। वास्तविक सृजन / प्रारंभिकरण के लिए ... .NET मेमोरी मॉडल संकलक को थोड़ी देर तक पढ़ता / लिखता है जब तक कि सरल नियमों का पालन नहीं किया जाता है जब तक वेरिएबल को volatile के रूप में चिह्नित नहीं किया जाता है।


मेरा मानना ​​है कि इसे चर के समग्र दायरे से करना है, यह एक ब्लॉक स्तर का दायरा है जिसे स्विच स्तर पर परिभाषित किया गया है।

व्यक्तिगत रूप से यदि आप वास्तव में किसी भी लाभ के लिए अपने उदाहरण में स्विच के अंदर कुछ मूल्य निर्धारित कर रहे हैं, तो आप इसे स्विच के बाहर भी घोषित करना चाहते हैं।


यदि आप किसी विशेष मामले में स्केल किए गए चर को चाहते हैं, तो बस मामले को अपने ब्लॉक में संलग्न करें:

switch (Type)
{
    case Type.A:
    {
        string variable = "x";
        /* Do other stuff with variable */
    }
    break;

    case Type.B:
    {
        string variable = "y";
        /* Do other stuff with variable */
    }
    break;
}

"मेरे दास में ..."

swicth एक वास्तव में आदिम प्रक्रियात्मक कार्यान्वयन है जो C की उम्र के बाद से ही रहा है ( C++ से पहले भी)।

पूरा switch एक ब्लॉक है जो एक दायरे से निहित GOTO: रूप में कार्य करता है GOTO: (इसलिए : प्रत्येक case )। यदि आप कुछ असेंबलर कक्षाएं लेते हैं, तो यह परिचित प्रतीत हो सकता है।

यही कारण है कि Enum साथ संयोजन करते समय switch उपयोग सबसे उपयोगी होता है और हर case में break का उपयोग नहीं करते हैं

switch(mood)
{
    case Mood.BORED:
    case Mood.HAPPY:
        drink(oBeer) // will drink if bored OR happy
break;

    case Mood.SAD: // unnecessary but proofs a concept
    default:
        drink(oCoffee)
break;
}




switch-statement