वांछित स्तर पर घोंसला वाले लूप से बाहर निकलें [डुप्लिकेट] - सी #, ब्रेक, नेस्टेड-लूप

संभावित डुप्लिकेट:
एक नेस्टेड पाश से बाहर तोड़ना

एक विशिष्ट स्तर पर नेस्टेड लूप से कैसे बाहर निकलें। उदाहरण के लिए:

foreach (item in Items)
{
foreach (item2 in Items2)
{
// Break; => we just exit the inner loop
//           while we need to break both loops.
}
}

और यदि अधिक घोंसले वाले लूप हैं और हम अंदर से एनथ लूप से बाहर निकलना चाहते हैं। कुछ इस तरह break(2) उपर्युक्त उदाहरण पर जो दोनों लूप को तोड़ देता है।

उत्तर:

उत्तर № 1 के लिए 20

दो विकल्प मैं सोच सकता हूं:

(1) इससे पहले कि आप इसे तोड़ने से पहले दूसरे लूप के अंदर ध्वज सेट करें। ध्वज सेट होने पर पहले पुनरावृत्ति से बाहर निकलने वाली स्थिति के साथ आंतरिक पुनरावृत्ति का पालन करें।

bool flag = false;
foreach (item in Items)
{
foreach (item2 in Items2)
{
flag = true; // whenever you want to break
break;
}

if (flag) break;
}

(2) एक गोटो स्टेटमेंट का प्रयोग करें।

foreach (item in Items)
{
foreach (item2 in Items2)
{
goto GetMeOutOfHere: // when you want to break out of both
}

}

GetMeOutOfHere:
// do whatever.

जवाब के लिए 8 № 2

वहाँ हमेशा डरावना (और बहुत बदनाम?) Goto है ...

संपादित करें: थोड़ी देर के लिए यह सोचने के बाद यह मेरे लिए होता है कि आप ऐसा करने के लिए लिंक का उपयोग कर सकते हैं, मानते हैं कि कुछ शर्तों को पूरा किया जाता है।

var query = from item in items
from item2 in items2
select new { item, item2 };

foreach (var tuple in query)
{
//...
break;
}

हालांकि, आप एफ # में इसे और अधिक सुंदर ढंग से कर सकते हैं।


जवाब के लिए 2 № 3

इस पोस्ट में पहले इस पर चर्चा की गई है:

एक नेस्टेड पाश से बाहर तोड़ना

संक्षिप्त उत्तर: यह वास्तव में एक ही कीवर्ड के साथ संभव नहीं है। आपको कुछ ध्वज तर्क में कोड करना होगा (जैसा कि दूसरे प्रश्न के उत्तर में सुझाया गया है।)

मैं व्यक्तिगत रूप से इसे अलग-अलग तरीकों से विभाजित करता हूं, एक फंक्शन के अंदर लूप "ब्लॉक" डालता हूं और केवल आपके लिए काम करता है (इस प्रकार दोनों लूप तोड़ता है)?


संबंधित सवाल
सबसे लोकप्रिय