के माध्यम से सभी कोड पथ नीचे कोड ठीक काम करता है का पालन कर सकते क्यों:नहीं सी # संकलक एक स्विच बयान
ListControl lstMyControl;
if (SomeVariable == SomeEnum.Value1)
{
lstMyControl = new DropDownList();
}
else
{
lstMyControl = new RadioButtonList();
}
lstMyControl.CssClass = "SomeClass";
जबकि नीचे कोड संकलन नहीं होगा:
ListControl lstMyControl;
switch (SomeVariable)
{
case SomeEnum.Value1:
lstMyControl = new DropDownList();
break;
case default:
lstMyControl = new RadioButtonList();
break;
}
lstMyControl.CssClass = "SomeClass";
दूसरे उदाहरण में संकलक कहता है कि मैं एक चर पर एक संपत्ति सेट करने की कोशिश कर रहा हूं जिसे तत्काल नहीं किया गया है। किसी भी मामले में lstMyControl को तत्काल चालू किया जाना चाहिए, लेकिन कंपिलर उस कोड पथ का पालन करने के लिए स्विच स्टेटमेंट का पालन नहीं कर सकता है। उपर्युक्त सरल उदाहरण में मैं बस/else का उपयोग करूंगा। लेकिन कुछ ऐसे समय हैं जब मैं 10 अलग-अलग वर्गों के साथ ऐसा कुछ करना चाहता था, जो सभी एक ही बेस क्लास से प्राप्त होते हैं और 10/यदि अन्यथा कथन कथन होता है तो मुझे स्विच कथन का उपयोग करना चाहिए।
आगे उत्तर देने के लिए तत्पर हैं ... जावा उस तरह काट नहीं पाएगा ... और मुझे उम्मीद है कि सी # या तो नहीं होगा। – Romain
अगर (कुछ उपलब्ध = कुछEnum.Value1) <- आपको यकीन है कि यह इसके बजाय तुलना नहीं होनी चाहिए? अगर (कुछ उपलब्ध == SomeEnum.Value1) –
मुझे लगता है कि आपके दूसरे उदाहरण (लिखित के रूप में) में, कंपाइलर वास्तव में 'सिंटेक्स त्रुटि' कहता है, (उस लाइन पर 'अपेक्षित' जहां आपके पास 'केस डिफ़ॉल्ट है:'। इसे सही करें 'डिफ़ॉल्ट: 'और presto, सबकुछ काम करता है। – AakashM