2011-11-01 10 views
5

क्या यह एक "ठीक है" कोड है?आखिरकार कोशिश करने/पकड़ने के लिए ठीक है?

 try 
     { /*stuff*/ } 
     catch (Exception e) 
     { /*stuff*/ } 
     finally 
     { 
      try 
      { /*stuff*/ } 
      catch { /*empty*/ } 
     } 

मैं अंत में में जटिल आपरेशन करने की जरूरत है और यह क्रैश हो सकता है क्योंकि यह एक डीबी

से कनेक्ट कर रहा है यह तो मुझे अजीब लग रहे हैं,। क्या यह सही तरीका है?

+4

यह निर्भर करता है ...... –

+6

यदि आपके पास मेडिकल हालत है तो गोलियाँ लेना ठीक है? आइए यहां रिक्त स्थान भरें। आखिर में कोशिश/पकड़ने की अवधारणा में कुछ भी गलत नहीं है, लेकिन आप जो करने की कोशिश कर रहे हैं उसके आधार पर चीजें गलत हो सकती हैं, और आपके अंतिम लक्ष्य क्या हैं। – corsiKa

+0

क्या आप हमें बता सकते हैं कि आखिर में आप क्या करने जा रहे हैं? – Purplegoldfish

उत्तर

3

यह वास्तव में आप जो कर रहे हैं उस पर निर्भर होने जा रहा है, लेकिन व्यक्तिगत रूप से, यदि यह वास्तव में ऑपरेशन के बाद पकड़ने और करने के बाद अन्य प्रयासों के बाद होता है तो मैं इसे आखिर में घोंसला नहीं दूंगा, बस इसे एक और प्रयास पकड़ने के रूप में मानें । इससे इसमें कुछ "विषमता" दूर हो जाएगी।

+0

यह मुझे पूरी तस्वीर (कोड) पर फिर से दिखता है और वास्तव में आपका अधिकार है, मेरे मामले में, आखिरकार इसे हटाने और मूल के बाद एक और प्रयास/पकड़ जोड़ने के लिए बेहतर है। – Fredou

1

नेस्टेड प्रयास/पकड़ ब्लॉक आदर्श नहीं हैं, लेकिन कुछ मामलों में यह आवश्यक है। बस किसी भी त्रुटि को सही तरीके से संभालना सुनिश्चित करें।

0

हां। finally में एक अपवाद मूल अपवाद छुपाएगा। यह not to use using in WCF while creating proxies की सिफारिश के समान है - हालांकि यह स्वयं एक अलग चर्चा है।

यह एक से इच्छा उत्पादन बी बल्कि:

static void Main(string[] args) 
    { 
     try 
     { 
      try 
      { 
       throw new ApplicationException("A"); 
      } 
      finally 
      { 
       throw new ApplicationException("B"); 
      } 
     } 
     catch (Exception e) 
     { 

      Console.WriteLine(e.Message); 
     } 
     Console.Read(); 
    } 
1

Idomatically, तो आप इस करना होगा:

try 
{ 
    /* stuff */ 
} 
catch 
{ 
    /* stuff */ 
} 
finally 
{ 
    DoStuff(); 
} 


void DoStuff() 
{ 
    try 
    { 
     /* stuff */ 
    } 
    catch 
    { 
     /* stuff */ 
    } 
} 
+0

यह कोई समझ नहीं आता है, मुझे नहीं लगता कि यह किसी समस्या को हल करता है, और शायद ही कोई आदर्श स्थिति है। मैं तर्क दूंगा कि दोनों पकड़ने के कथनों को अपनी पद्धति में होना चाहिए, जिसे एक विधि के भीतर बुलाया जाना चाहिए, एक के बाद एक। इन तरीकों को एक मूल्य वापस करना चाहिए। –

0

हां। आम तौर पर अपवाद फेंकते समय एक और अपवाद सक्रिय होता है जिसके परिणामस्वरूप दूसरे अपवाद को दूसरे (बाद में) अपवाद द्वारा प्रतिस्थापित किया जा सकता है।

public static void Main(string[] args) 
    { 
     try 
     { 
      try 
      { 
       throw new Exception("first exception"); 
      } 
      finally 
      { 
       //try 
       { 
        throw new Exception("second exception"); 
       } 
       //catch (Exception) 
       { 
        //throw; 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e); 
     } 
    } 
  • कोड चलाने और आप "दूसरा अपवाद"
  • टिप्पणी हटाएं देखेंगे ट्राई एवं कैच बयानों और आप "पहले अपवाद" देखेंगे:

    यहाँ कुछ कोड है कि दिखाता है क्या होता है

  • फेंक भी असम्बद्ध; कथन और आप फिर से "दूसरा अपवाद" देखेंगे।
संबंधित मुद्दे

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