2011-03-21 13 views
16

पर विचार करें:सी #: कई कैच खंड निम्नलिखित

try { 
    FileStream fileStream = new FileStream("C:\files\file1.txt", FileMode.Append); } 
catch (DirectoryNotFoundException e) 
    { MessageBox.Show("Directory not found. " + e.Message); } 
catch (IOException e) 
    { MessageBox.Show("Other IO Error. " + e.Message); } 
catch (Exception e) 
    { MessageBox.Show("Other Error. " + e.Message); } 

एक DirectoryNotFoundException अपवाद या सिर्फ पहले एक सभी तीन catch खंड द्वारा नियंत्रित हो जाएगा?

उत्तर

26

बस पहला वाला। अपवाद सभी मिलान कैच क्लोज़ पर प्रचारित नहीं करता है।

सी # 4 युक्ति से, खंड 8.9.5:

पहले catch खंड है कि अपवाद प्रकार या अपवाद प्रकार का एक आधार प्रकार निर्दिष्ट मिलान माना जाता है। [...] यदि मिलान catch खंड स्थित है, तो अपवाद प्रसार catch खंड के ब्लॉक पर नियंत्रण स्थानांतरित करके पूरा हो गया है।

यहां "पूरा" भाग इंगित करता है कि नियंत्रण को स्थानांतरित कर दिया गया है, यह विशेष रूप से विशेष हैंडलिंग का अंत है।

3

केवल पहला वाला। पकड़-ब्लॉक नहीं गिरता है।

1

केवल 1 एक, 1 मिलान पकड़ खंड अपवाद

3

केवल पहले मिलान पकड़ संभाल लेंगे कैच अपवाद है, तो आप आप इसे फिर से फेंक करना होगा के लिए किसी भी कारण से इसे फिर से cacth करने की जरूरत है चाहिए तो "बाहरी" पकड़ कैलस इसे पकड़ने में सक्षम हो जाएगा।

1

अपवादों को संभालने का यह सही तरीका है - सबसे विशिष्ट अपवाद प्रकार से शुरू करें और वापस काम करें। हालांकि, अगर आप अपवाद को हल करने या संभालने के लिए कुछ भी नहीं कर सकते हैं, तो इसे पकड़ो मत। उदाहरण के लिए, मुझे लगता है कि आपका कोड कुछ फ़ाइल-एक्सेस विधि में है, मैं अंतिम पकड़ (अपवाद) ब्लॉक को हटा दूंगा, क्योंकि इसके बारे में आप कुछ भी नहीं कर सकते हैं (क्या होगा यदि यह एक स्टैक ओवरफ़्लो है, स्मृति से बाहर या कुछ अन्य गंभीर सिस्टम अपवाद ...)

+1

आपको हमेशा सभी अपवादों को पकड़ना चाहिए, क्योंकि उपयोगकर्ता को स्टैक ट्रेस इत्यादि के साथ अपवाद का सामान्य प्रदर्शन कभी नहीं देखना चाहिए –

+4

नहीं, ** ** ** नहीं। सबसे सामान्य अपवाद केवल प्रस्तुति परत के शीर्ष पर पकड़े जाने चाहिए, क्योंकि यह एकमात्र ऐसा स्थान है जहां आप उनके बारे में कुछ भी कर सकते हैं (एक अच्छा त्रुटि संदेश प्रदर्शित करें)। – MattDavey

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