2013-01-07 35 views
8

मैं कोड के नीचे है अंदर एक स्विच घोंसले में CONTINUE` keywoard का उपयोग करते हुए `(जो वास्तव में बहुत लंबे समय तक की तुलना में आप देख रहा है!)एक foreach पाश

foreach (SensorPair sensor in _sensorPairs) 
{ 
    sensorByte = (byte) sensor.Sensor; 

    if (!packet.Contains(sensorByte)) 
     continue; 

    index = packet.IndexOf(sensorByte); 
    byteCount = sensor.ByteCount; 

    switch (byteCount) 
    { 
     case 1: 
      try 
      { 
       switch(sensor.ValueType) 
       { 
        case SensorValueType.Unsigned: 
         val = (int)packet[index + 1]; 
         if (val > 255) 
          //*** WHAT DOES THIS CONTINUE DO? 
          continue; 
         else //rise the event 
          OnSensorReport();        
        break; 

continue करता keywoard आप के लिए foreach पाश कारण देखने अगले आइटम को फिर से शुरू करना शुरू करें या यह अगले case कथन पर बस जाता है?

यदि यह फ़ोरैच लूप के साथ कुछ भी नहीं करता है, तो मैं स्विच से बाहर निकलने के लिए कोड को कैसे मजबूर कर सकता हूं और फोरैच लूप में अगला पुनरावृत्ति शुरू कर सकता हूं?

+17

-1, जब आपने इसका परीक्षण किया, तो क्या हुआ? –

+2

क्या आपने इसे आजमाया? – MyCodeSucks

+2

यह लूप जारी है। अगले मामले में जाना "गेटो केस 2;" है। –

उत्तर

18

हां, यह foreach लूप जारी है।

यह हमेशा से परामर्श करने के documentation ;-)

जारी रखने के बयान संलग्न करते हुए की अगले चरण के लिए नियंत्रण से गुजरता है, करते हैं, के लिए, या foreach बयान है जिसमें यह प्रतीत होता है उपयोगी है।

या — अधिक व्यापक — C# language specification:

8.9.2 बयान

बयान जारी रखने के लिए जारी रखने के लिए जबकि enclosing निकटतम की एक नई यात्रा, करते हैं, के लिए शुरू होता है , या foreach स्टेटमेंट

एक जारी बयान का लक्ष्य कथन के दौरान निकटतम संलग्नक के एम्बेडेड कथन का अंतिम बिंदु है। यदि एक जारी बयान थोड़ी देर से संलग्न नहीं है, तो, , या foreach कथन के लिए, एक संकलन-समय त्रुटि होती है।

कई जबकि, करते हैं, के लिए, या foreach बयान एक दूसरे के भीतर नेस्ट कर रहे हैं, एक बयान जारी रखने के लिए केवल अंतरतम बयान पर लागू होता है । एकाधिक घोंसले के स्तर पर नियंत्रण स्थानांतरित करने के लिए, एक गोटो कथन (§8.9.3) का उपयोग किया जाना चाहिए।

एक जारी बयान अंततः ब्लॉक (§8.10) से बाहर नहीं निकल सकता है। जब जारी रखें बयान अंत में ब्लॉक के भीतर होता है, तो का लक्ष्य जारी रखें बयान अंत में ब्लॉक के भीतर होना चाहिए; अन्यथा संकलन-समय त्रुटि उत्पन्न होती है।

एक जारी रखने के लिए इस प्रकार के बयान निष्पादित होने

  • जारी रखने के बयान जुड़े अंत में ब्लॉक के साथ एक या अधिक कोशिश ब्लॉक बाहर निकालता है, तो नियंत्रण शुरू में अंत में अंतरतम कोशिश बयान के ब्लॉक करने के लिए स्थानांतरित कर रहा है। कब और यदि नियंत्रण अंततः ब्लॉक के अंत बिंदु तक पहुंचता है, तो नियंत्रण को अगले संलग्न प्रयास कथन के अंत में ब्लॉक स्थानांतरित कर दिया जाता है। यह प्रक्रिया तब तक दोहराई गई है जब तक कि सभी हस्तक्षेप करने वाले प्रयासों के अंतिम ब्लॉक निष्पादित नहीं किए गए हैं।

  • नियंत्रण कथन जारी रखने के लक्ष्य पर स्थानांतरित किया गया है।

क्योंकि एक बयान जारी रखने के लिए बिना शर्त नियंत्रण हस्तांतरित कर देता है कहीं और, एक बयान जारी रखने का अंतिम बिंदु कभी नहीं पहुंचा जा सकता है।

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