2012-11-24 17 views
37

C# में, अंततः प्रयास को कैसे रोकें?अंततः प्रयास को कैसे रोकता है?

तो अगर वहाँ एक अपवाद है, मुझे पता है कि यह कैच ब्लॉक पर चला जाएगा और फिर अंत में ब्लॉक करने के लिए कूद।

लेकिन क्या अगर कोई त्रुटि है, कैच ब्लॉक अभ्यस्त चलाने मिलता है, लेकिन अंत में ब्लॉक तो चलाने होता है?

+1

@ MatíasFidemraizer: मैं सभी प्रयोग के लिए हूं - लेकिन यह आपको जरूरी नहीं बताता कि भाषा क्या गारंटी देती है। ऐसी कई चीजें हैं जिन्हें आप प्रयोग द्वारा "खोज" सकते हैं जो भरोसा करना बुरा होगा। 'कोशिश {}: –

+0

@JonSkeet मैं सामान्य शब्दों में बात कर रहा हूँ, नहीं अपने खुद के सुझाव (अपने लिंक) के बारे में है, लेकिन मेरा मतलब है कि जाँच कैसे की कोशिश/पकड़/अंत में सी # में काम करता है कुछ है कि तुम सिर्फ इस कोड के साथ की खोज कर सकते हैं पकड़ो {} अंत में {Trace.WriteLine ("मैं यहाँ हूँ!"); } 'उदाहरण के लिए :) –

+0

@ MatíasFidemraizer: लेकिन यह मेरा मुद्दा है - जो आपको दिखाता है कि यह इस विशेष मामले में क्या करता है - लेकिन यह आपको कुछ भी नहीं बताता है कि क्या होता है (कहें) आप' try' block में वापस आते हैं। हां, प्रयोग अच्छा है - लेकिन मैं आम तौर पर जहां संभव हो वहां एक विनिर्देश पर भरोसा करना पसंद करता हूं। –

उत्तर

34

हाँ, अंत में ब्लॉक चलाने हो जाता है एक अपवाद है या नहीं।

 
Try 
    [ tryStatements ] 
    [ Exit Try ] 
[ Catch [ exception [ As type ] ] [ When expression ] 
    [ catchStatements ] 
    [ Exit Try ] ] 
[ Catch ... ] 
[ Finally 
    [ finallyStatements ] ] --RUN ALWAYS 
End Try 

देखें: http://msdn.microsoft.com/en-us/library/fk6t46tz%28v=vs.80%29.aspx

+10

अंतिम ब्लॉक का क्या मतलब है? क्या TRY ब्लॉक के बाहर की अगली पंक्ति किसी भी तरह से निष्पादित नहीं की जाएगी? आखिरकार परेशान क्यों? – Doug

+4

@Doug, http://stackoverflow.com/questions/547791/why-use-finally-in-c –

12

हाँ अंत में खंड अगर वहाँ कोई अपवाद नहीं है exeucuted हो जाता है। तो यहाँ एक उदाहरण

 try 
     { 
      int a = 10; 
      int b = 20; 
      int z = a + b; 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 
     finally 
     { 
      Console.WriteLine("Executed"); 
     } 

ले रहा है, तो एक अपवाद मान लें तब भी होता है अंत में मार डाला जाता है।

0

अंत में हमेशा चलने वाला ब्लॉक, कोई बात नहीं क्या। सिर्फ इस विधि

 public int TryCatchFinally(int a, int b) 
    { 
     try 
     { 
      int sum = a + b; 
      if (a > b) 
      { 
       throw new Exception(); 
      } 
      else 
      { 
       int rightreturn = 2; 
       return rightreturn; 
      } 
     } 
     catch (Exception) 
     { 
      int ret = 1; 
      return ret; 
     } 
     finally 
     { 
      int fin = 5; 
     } 
    } 
0
 try 
     { 
      //Function to Perform 
     } 
     catch (Exception e) 
     { 
     //You can display what error occured in Try block, with exact technical spec (DivideByZeroException) 
      throw; 
      // Displaying error through signal to Machine, 
      //throw is usefull , if you calling a method with try from derived class.. So the method will directly get the signal     
     } 

     finally //Optional 
     { 
      //Here You can write any code to be executed after error occured in Try block 
      Console.WriteLine("Completed"); 
     } 
+0

'' 'finally''' हमेशा के मार डाला,' '' catch''' catched है कि क्या एक त्रुटि या नहीं। – Mason

4

पकड़ का एक आम उपयोग कोशिश करते हैं और अंत में एक साथ प्राप्त करने के लिए और एक कोशिश ब्लॉक में संसाधनों का उपयोग, एक कैच ब्लॉक में असाधारण परिस्थितियों से निपटने, और अंत में में संसाधनों जारी है ब्लॉक।

पुन: फेंकने वाले अपवादों पर अधिक जानकारी और उदाहरणों के लिए, try-catch और Throwing Exceptions देखें। अंत में ब्लॉक के बारे में अधिक जानकारी के लिए, try-finally देखें।

public class EHClass 
{ 
    void ReadFile(int index) 
    { 
     // To run this code, substitute a valid path from your local machine 
     string path = @"c:\users\public\test.txt"; 
     System.IO.StreamReader file = new System.IO.StreamReader(path); 
     char[] buffer = new char[10]; 
     try 
     { 
      file.ReadBlock(buffer, index, buffer.Length); 
     } 
     catch (System.IO.IOException e) 
     { 
      Console.WriteLine("Error reading from {0}. Message = {1}", path, e.Message); 
     } 

     finally 
     { 
      if (file != null) 
      { 
       file.Close(); 
      } 
     } 
     // Do something with buffer... 
    } 

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