2010-11-10 20 views
6

से लूप के लिए ब्रेकिंग से अंततः इस मामले में निष्पादित किया गया है? मैंने यह कोड लिखा और यह तय नहीं कर सका कि आखिरकार इस मामले में वास्तव में निष्पादित किया गया है या नहीं। मैं वास्तव में कुछ स्पष्टीकरण पसंद करूंगा चाहे कोई जवाब न हो।कैच ब्लॉक

foreach(string s in allStrings) 
{ 
    try 
    { 
     //Error happens here 
    } 
    catch(Exception ex) 
    { 
     //Handle exception 
     break; 
    } 
    finally 
    { 
     //Clean up code 
    } 
} 
+13

"क्या आपने इसे आजमाया है?" – Alex

+3

मैंने एक प्रयोग चलाया, मैंने इस सवाल को बनाने में कितना समय लगेगा, और मैंने समय लगाया कि इसे कंसोल ऐप में रखने में कितना समय लगेगा और "रन" पर क्लिक करें। कंसोल जीता। ठीक है, मैंने वास्तव में एक प्रयोग नहीं किया था लेकिन आपको बिंदु मिल गया। :) – RPM1984

+0

[* खांसी *] (http://stackoverflow.com/questions/4150186/breaking-out-of-a-for-loop-from-a-catch-block/4150190#4150190) –

उत्तर

6

आपने 90% कोड लिखा है जिसे आपको अपने लिए इस प्रश्न का उत्तर देने की आवश्यकता होगी।

लेखन जारी रखें।

+0

+1 का उत्तर नहीं चुनने के लिए दोबारा क्षमा करें, मैं उस पर विस्तार से बताऊंगा (मूल नहीं होना)। –

8

हां। अंत में ब्लॉक हमेशा निष्पादित होते हैं जब नियंत्रण एक समान प्रयास या पकड़ ब्लॉक छोड़ देता है। (जब तक कुछ सुपर विशेष होता है, एक क्रम दुर्घटना या धागे की तरह रद्द कर दिया गया।)

2

प्रभावी ढंग से, अंत में ब्लॉक हमेशा कहा जाता है। यही वजह है कि उन्हें इस तरह नाम दिया गया है ...

1

हां, यह है। अंत में ब्लॉक हमेशा निष्पादित होते हैं। http://download.oracle.com/javase/tutorial/essential/exceptions/finally.html

+2

यह प्रश्न जावा के बारे में था, जावा नहीं। – cdhowie

+1

वह सी # – McKay

+3

के बारे में बात कर रहा है सावधान, प्रश्न सी # के बारे में है, जावा नहीं (हालांकि, आपका कथन अभी भी सत्य है)। –

2

मैट के उत्तर के आधार पर देखें। यह वास्तव में कुल ओवरकिल है।

मैं ऐसा कुछ करने का सुझाव देता हूं, और यह सुनिश्चित करता हूं कि परीक्षण पास हो जाए। MSTest परीक्षण के लिए सबसे अच्छा पुस्तकालय नहीं है, लेकिन यह "मानक" है :)

[TestClass()] 
public class FinalClauseTester 
{ 
    private TestContext testContextInstance; 
    public TestContext TestContext 
    { 
     get 
     { 
      return testContextInstance; 
     } 
     set 
     { 
      testContextInstance = value; 
     } 
    } 

    [TestMethod] 
    [DeploymentItem(@"Something right goes here.")] 
    [DataSource("Something else goes here", "row", somethingOtherSetupCrap)] 
    public void TestFinalClause() 
    { 

     string[] allStrings = {"1", "2", "3", "4", "5"}; 
     int yesCount = 0; 
     foreach(string s in allStrings) 
     { 
      try 
      { 
       //Error happens here 
       throw new Exception(); 
      } 
      catch(Exception ex) 
      { 
       //Handle exception 
       if (yesCount == 3) 
       { 
        break; 
       } 
      } 
      finally 
      { 
       //Clean up code 
       yesCount++; 
      } 
     } 

     // And, at the end of this loop ... 
     Debug.Assert(yesCount = 3); // Or something like this. 
    } 
} 
+1

+1 हालांकि यह _total_ ओवरकिल है: पी –

+1

तंग स्कूल की समयसीमा के लिए पेरोल पर रहते हुए यह इस मामले में एक बुरा विचार है; परीक्षण लिखने के लिए उपयोग किया जा रहा है (हालांकि यह मामला एक ओवरकिल है) कुछ दूर भविष्य में भुगतान कर सकता है। –

+1

आपके foreach कथन का समापन '}' नहीं है। साथ ही, चूंकि 'yesCount' 0 के रूप में शुरू होता है, इसलिए अंतिम परिणाम लूप के माध्यम से पहली बार 'yesCount == 1' होगा, जिसे आपने' ब्रेक 'कहा था जिसे लूप को समाप्त किया गया था (अंत में ब्लॉक चलाने के बाद)। – Trisped

1

हाँ, यह कोशिश करता है की कोशिश, तो पकड़ अपवाद पकड़ता है, और फिर अंत में क्या अंत में दोनों सामान्य निष्पादन के लिए कहा जाता है और अपवाद पकड़े गए। मुझे लगता है कि वहां कहीं छिपकर एक विटिसिज्म है!

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