VB.NET - प्रत्येक लूप के लिए अगले आइटम पर कैसे जाएं?


93

क्या कोई क़ानून ऐसा है Exit For, जो लूप से बाहर निकलने के बजाय इसे अगले आइटम पर ले जाता है।

उदाहरण के लिए:

For Each I As Item In Items

    If I = x Then 
        ' Move to next item
    End If

    ' Do something

Next

मुझे पता Elseहै कि अगर वह इस प्रकार से पढ़ता है तो वह इफ स्टेटमेंट को जोड़ सकता है:

For Each I As Item In Items

    If I = x Then 
        ' Move to next item
    Else
        ' Do something
    End If

Next

बस सोच रहा था कि Itemsसूची में अगले आइटम पर कूदने का कोई तरीका है । मुझे यकीन है कि अधिकांश ठीक से पूछ रहे होंगे कि केवल Elseकथन का उपयोग क्यों नहीं किया गया है, लेकिन मेरे लिए "डू समथिंग" कोड को लपेटना कम पठनीय लगता है। खासकर जब बहुत अधिक कोड हो।

जवाबों:


178
For Each I As Item In Items
    If I = x Then Continue For

    ' Do something
Next

धन्यवाद यह वही है जो मैं देख रहा था, मजाकिया कि MSDN प्रलेखन में कैसे नहीं ?? ( msdn.microsoft.com/en-us/library/5ebk1751.aspx ) जॉन को पूरे 20 सेकंड तक पोस्ट करने के लिए बधाई! :)
सीन टेलर

9
मैं लगभग एक बार फिर से स्कीट हो गया! ;)
एडम रॉबिन्सन

आप बेहतर Ifढंग से बयान को ठीक से बंद कर देंगे । यह भ्रामक है।
mchar

48

मैं का उपयोग करेंगे Continue इसके बजाय कथन का :

For Each I As Item In Items

    If I = x Then
        Continue For
    End If

    ' Do something

Next

ध्यान दें कि यह पुनरावृत्त को आगे बढ़ाने के लिए थोड़ा अलग है - Ifवसीयत से पहले कुछ भी फिर से निष्पादित किया जाएगा। आमतौर पर यह वही है जो आप चाहते हैं, लेकिन यदि आपको लूप का उपयोग करने के बजाय इसका उपयोग GetEnumerator()और फिर MoveNext()/ Currentस्पष्ट रूप से करना होगा For Each


4

व्हाट अबाउट:

If Not I = x Then

  ' Do something '

End If

' Move to next item '

1

मैं स्पष्ट होना चाहता हूं कि निम्नलिखित कोड अच्छा अभ्यास नहीं है। आप गोटो लेबल का उपयोग कर सकते हैं:

For Each I As Item In Items

    If I = x Then
       'Move to next item
        GOTO Label1
    End If

    ' Do something
    Label1:
Next

23
आप कर सकते हैं, लेकिन कृपया नहीं।
मिश्रीइंडेक्स

कूदने के कारण, इसलिए यह खराब है।
सैय्यद तय्यब अली

4
यदि यह अच्छा अभ्यास नहीं है, और एक स्पष्ट रूप से बेहतर समाधान है जो भाषा का समर्थन करती है (जारी रखें / फिर से शुरू करें), तो शायद यह उत्तर स्वेच्छा से हटा दिया जाए।
eniacAvenger

Stackoverflow उपलब्ध विकल्पों की सीमा की खोज के उद्देश्य से कई उत्तरों की अनुमति देता है। मैं मानता हूं कि यह एक बुरा विकल्प है, लेकिन यह एक विकल्प है। इसलिए मुझे लगता है कि यह पूर्णता के लिए शामिल होने के योग्य है।
जेफ

0

जब मैंने Continue Forइसे विफल करने की कोशिश की , तो मुझे एक संकलक त्रुटि मिली। ऐसा करते समय, मैंने 'रिज्यूम' की खोज की:

For Each I As Item In Items

    If I = x Then
       'Move to next item
       Resume Next
    End If

    'Do something

Next

नोट: मैं यहां VBA का उपयोग कर रहा हूं।


2
यह कोड VBA में भी काम नहीं करता है। Resume Nextअसंरचित त्रुटि से निपटने के लिए है।
डैनियल

वीबीए में लूप के पूरे छोर को लपेटने के लिए आपको एक बड़े IF स्टेटमेंट का उपयोग करना होगा क्योंकि कोई कंटिन्यू स्टेटमेंट नहीं है। तोIf I <> x Then
हैकस्लैश

0

केवल "जारी रखें" एक स्वीकार्य मानक है (बाकी "स्पेगेटी कोड" की ओर जाता है)।

कम से कम "जारी रखें" के साथ प्रोग्रामर जानता है कि कोड सीधे लूप के शीर्ष पर जाता है।

हालांकि शुद्धतावादियों के लिए, ऐसा कुछ सबसे अच्छा है क्योंकि यह शुद्ध "गैर-स्पेगेटी" कोड है।

Dim bKeepGoing as Boolean 
For Each I As Item In Items
  bKeepGoing = True
  If I = x Then
    bKeepGoing = False
  End If
  if bKeepGoing then
    ' Do something
  endif
Next

हालांकि कोडिंग में आसानी के लिए, "जारी रखें" ठीक है। (हालांकि यह टिप्पणी करने के लिए अच्छा विचार है)।

"जारी रखें" का उपयोग करना

For Each I As Item In Items
  If I = x Then
    Continue For   'skip back directly to top of loop
  End If
  ' Do something
Next
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.