2011-01-06 9 views
6

बस यह सुनिश्चित करना कि मैं इसे अच्छी तरह समझता हूं। क्या सही स्कीमा सही है? पकड़ ब्लॉक के सेट के अंत में सामान्य पकड़ के साथ व्यापक अपवादों को पकड़ने के लिए पहले सबसे विशिष्ट अपवादों को पकड़ना।कैच ब्लॉक का आदेश महत्वपूर्ण है?

try 
{ 
some code 
} 


catch(SomeSpecificException ex) 
{ 
} 
catch(LessSpecificException ex) 
{ 
} 
catch 
{ 
    //some general exception 
} 
+5

हां, यह सही क्रम है। –

+0

http://stackoverflow.com/questions/3960259/catching-exceptions-c/3960283#3960283 का डुप्लिकेट? – sloth

+0

यदि आपका मतलब है "अधिक विशिष्ट" जैसा कि "कम विशिष्ट अपवाद वर्ग से लिया गया है", तो हां। हालांकि, अगर कोई दूसरे से वारिस नहीं करता है, तो आप उन्हें जो भी आदेश चाहते हैं उसे डाल सकते हैं। आप तर्क दे सकते हैं कि 'FileNotFoundOnAnyServerException' _ememantically_' FileNotFoundException' से अधिक विशिष्ट है। लेकिन अगर यह 'FileNotFoundException' से प्राप्त नहीं होता है, तो संघर्ष का कोई जोखिम नहीं है, और इसलिए संकलक परवाह नहीं है। – Flater

उत्तर

5

मुझे विश्वास है कि यह आपको गलत क्रम में लिखने नहीं देगा।

यह एक त्रुटि उत्पन्न करता है:

try 
{ 
    throw new OutOfMemoryException(); 
} 
catch(Exception ex) 
{ 
    "B".Dump(); 
} 
catch(OutOfMemoryException ex) 
{ 
    "A".Dump(); 
} 
+1

"एक पिछले पकड़ खंड पहले से ही इस या किसी सुपर प्रकार ('System.Exception') के सभी अपवादों को पकड़ता है, विशिष्ट होने के लिए। –

+0

आह मुझे पहले यह नहीं पता था। धन्यवाद – Kurru

+0

@ मार्टिनो फर्नांडीस मुझे लगता है कि संकलक मुझे संकलित करने नहीं देगा। – Loj

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