2011-03-18 10 views
5

वहाँ (मैं जावास्क्रिप्ट में लगता है कि "मामले (< 10)" काम करता है, जहां अंतरालक्या अंतराल से निपटने के दौरान स्विच जैसी कुछ चीज़ों को प्रतिस्थापित करने का एक शानदार तरीका है?

if (compare < 10) 
     { 
      // Do one thing 
     } 
     else if (10 <= compare && compare < 20) 
     { 
      // Do another thing 
     } 
     else if (20 <= compare && compare < 30) 
     { 
      // Do yet another thing 
     } 
     else 
     { 
      // Do nothing 
     } 

एक स्विच बयान की तरह अधिक सुरुचिपूर्ण कुछ द्वारा की तरह की तुलना की जाती नेट एक कोड को बदलने के लिए एक रास्ता है, लेकिन सी # में)? क्या किसी और को यह कोड बदसूरत लगता है?

उत्तर

4

एक सरलीकरण: के बाद से इन सभी बाकी-अगर के बजाय सिर्फ अगर, आप पिछले स्थिति का निषेध जांच करने की जरूरत नहीं है। यानी, यह आपके कोड के बराबर है:

if (compare < 10) 
{ 
    // Do one thing 
} 
else if (compare < 20) 
{ 
    // Do another thing 
} 
else if (compare < 30) 
{ 
    // Do yet another thing 
} 
else 
{ 
    // Do nothing 
} 
+0

यह सच है:

हालांकि, उदाहरण के लिए आप आप वास्तव में की तरह कुछ कर सकता है दे सकता है? मैं क्यों नहीं – Olaf

2

के बाद से आप पहले से ही पुष्टि की है कि compare >= 10 पहले if के बाद, तुम सच में दूसरे पर लोअर बाउंड परीक्षण (या अन्य के किसी भी) की जरूरत नहीं है if एस ...

यह सुंदर नहीं है, लेकिन switch मूल रूप से सी में हैशिंग द्वारा कार्यान्वित किया गया था, ताकि यह if...else if श्रृंखला से वास्तव में तेज़ हो। इस तरह के एक कार्यान्वयन सामान्य श्रेणियों के लिए अच्छी तरह से अनुवाद नहीं करता है, और यही कारण है कि केवल निरंतर मामलों की अनुमति थी। क्यों आर # इस नहीं देखा -

switch(compare/10) { 
    case 0: 
     // Do one thing 
    break; 
    case 1: 
     // Do another thing 
    break; 
    case 2: 
     // Do yet another thing 
    break; 
    default; 
     // Do nothing 
    break; 
} 
+0

आपके 'स्विच (तुलना/10)' के संबंध में, यदि 'तुलना' नकारात्मक है तो क्या होगा? – Justin

+0

@ जस्टिन, हाँ, मैंने पोस्टिंग के बाद इसके बारे में सोचा, लेकिन इसे अनदेखा करने का फैसला किया ... इस मामले में आपको सामने या 'Math.Max ​​(0, तुलना/10)' के लिए 'if'' की आवश्यकता होगी अभिव्यक्ति। – jswolf19

+0

प्रश्न का मकसद अधिक सामान्य है: क्या सामान्य कोड संरचनाएं हैं जो इस तरह की चीज को कवर करती हैं और साथ ही साथ अंतराल अनियमित होते हैं? – Olaf

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

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