मैं C # में फ़ॉरच लूप से कैसे कूद सकता हूं?


124

foreachअगर मैं तत्वों में से किसी एक की आवश्यकता को पूरा करता हूं, तो मैं C # में एक लूप कैसे तोड़ सकता हूं ?

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

foreach(string s in sList){
      if(s.equals("ok")){
       //jump foreach loop and return true
     }
    //no item equals to "ok" then return false
}

मजेदार। पायथन में आप बस यही करेंगे return "ok" in sList:- क्या C # में कुछ तुलनीय नहीं है?
टिम पीटरज़

8
@ टिम पित्ज़कर: बेशक, स्पेंडर का जवाब है। वास्तव में, Linq के लिए उपयोग किए जाने के बाद, बहुत सारे जरूरी कोड गुफा चित्र की तरह दिखते हैं।
R0MANARMY

जवाबों:


220
foreach (string s in sList)
{
    if (s.equals("ok"))
        return true;
}

return false;

वैकल्पिक रूप से, यदि आपको आइटम मिल जाने के बाद कुछ अन्य चीजें करने की आवश्यकता है:

bool found = false;
foreach (string s in sList)
{
    if (s.equals("ok"))
    {
        found = true;
        break; // get out of the loop
    }
}

// do stuff

return found;

6
मेरा सुझाव है कि दूसरा उदाहरण बेहतर लिखा जाएगाbool found = callFunctionInFirstCodeSnipper(list); // do stuff
ICR


55

आप LINQ मार्ग लेकर स्पष्ट छोरों से बच सकते हैं:

sList.Any(s => s.Equals("ok"))

23
या बस उपयोग करें Contains("ok")
ग्राहम क्लार्क

7
@ ग्राहम क्लार्क: Containsमानता है कि आप एक से अधिक पुनरावृत्ति कर रहे हैं ICollection<T>Anyउस प्रकार के किसी भी काम पर काम करेगा IEnumerable<T>, और इस मामले में यह प्रश्न स्पष्ट रूप से इंगित नहीं करता है कि यह किस प्रकार के संग्रह से अधिक हो रहा है ( Listहालांकि यह एक बहुत अच्छा अनुमान है)।
R0MANARMY

32
foreach (var item in listOfItems) {
  if (condition_is_met)
    // Any processing you may need to complete here...
    break; // return true; also works if you're looking to
           // completely exit this function.
}

चाल चलनी चाहिए। ब्रेक स्टेटमेंट लूप के निष्पादन को समाप्त कर देगा, जबकि रिटर्न स्टेटमेंट स्पष्ट रूप से पूरे फ़ंक्शन को समाप्त कर देगा। अपने प्रश्न को देखते हुए आप रिटर्न का सही उपयोग करना चाह सकते हैं; बयान।


7

आप का उपयोग कर सकते हैं breakजो निकटतम संलग्न लूप से बाहर कूदता है, या आप बस सीधे कर सकते हैंreturn true


5

'ब्रेक' स्टेटमेंट का उपयोग करें। मुझे यह हास्यप्रद लगता है कि आपके प्रश्न का उत्तर आपके प्रश्न में शाब्दिक है! वैसे, एक साधारण Google खोज आपको जवाब दे सकती है।


3

कैसा रहेगा:

return(sList.Contains("ok"));

अगर आप जो करना चाहते हैं, वह ट्रिक करना चाहिए "ओके" की जाँच करें और उत्तर लौटाएँ ...


2

यह आपके प्रश्न का सीधा उत्तर नहीं है, लेकिन जो आप चाहते हैं उसे करने का एक बहुत आसान तरीका है। यदि आप .NET 3.5 या बाद में उपयोग कर रहे हैं, तो कम से कम। इसे Enumerable.Contains कहा जाता है

bool found = sList.Contains("ok");


1

या तो सीधे लूप से बाहर लौटें:

foreach(string s in sList){
   if(s.equals("ok")){
      return true;
   }
}

// if you haven't returned by now, no items are "ok"
return false;

या उपयोग करें break:

bool isOk = false;
foreach(string s in sList){
   if(s.equals("ok")){
      isOk = true;
      break; // jump out of the loop
   }
}

if(isOk)
{
    // do something
}

हालाँकि, आपके मामले में ऐसा कुछ करना बेहतर होगा:

if(sList.Contains("ok"))
{
    // at least one element is "ok"
}
else
{
   // no elements are "ok"
}

-2
var ind=0;
foreach(string s in sList){
    if(s.equals("ok")){
        return true;
    }
    ind++;
}
if (ind==sList.length){
    return false;
}

बहुत यकीन $है कि मान्य सी # वाक्यविन्यास नहीं है।
R0MANARMY

शायद नहीं, एक जावास्क्रिप्ट / php आदमी im। लेकिन काम करने के समाधान को लागू करने के लिए यहां पर्याप्त कोड है ... मैंने $ हटा दिया और var जोड़ा .. शायद अभी भी c + नहीं
जॉनी क्रेग

वास्तव varमें एक पूरी तरह से मान्य सी # कीवर्ड है, इसलिए आप अच्छे हैं
R0MANARMY
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.