आपके उदाहरणों के बीच प्रभावी अंतर तब तक नगण्य है जब तक कोई अपवाद नहीं फेंका जाता है।
यदि, हालांकि, एक अपवाद फेंक दिया जाता है, जबकि 'कोशिश' खंड में, पहला उदाहरण इसे पूरी तरह से निगल जाएगा। दूसरा उदाहरण कॉल स्टैक तक अगले चरण के अपवाद को बढ़ाएगा, इसलिए कहा गया उदाहरणों में अंतर यह है कि कोई पूरी तरह से किसी भी अपवाद (पहले उदाहरण) को अस्पष्ट करता है, और दूसरा (दूसरा उदाहरण) संभावित बाद के संचालन के लिए अपवाद जानकारी को संभालता है जबकि अभी भी 'अंत' खंड में सामग्री को निष्पादित कर रहा है।
यदि, उदाहरण के लिए, आपको पहले उदाहरण के 'कैच' क्लॉज में कोड डालना था जो एक अपवाद को फेंक देता था (या तो जो शुरुआत में उठाया गया था, या एक नया), पाठक क्लीनअप कोड कभी भी निष्पादित नहीं करेगा। अंत में 'कैच' क्लॉज में क्या होता है, इस पर ध्यान दिए बिना ।
तो, 'कैच' और 'अंत' के बीच मुख्य अंतर यह है कि 'अंत में' ब्लॉक (कुछ दुर्लभ अपवादों के साथ) की सामग्री को निष्पादित करने की गारंटी माना जा सकता है , यहां तक कि अप्रत्याशित अपवाद के बावजूद, किसी भी कोड का पालन करते समय एक 'कैच' क्लॉज (लेकिन एक 'अंततः' क्लॉज के बाहर) ऐसी गारंटी नहीं देता।
संयोग से, स्ट्रीम और स्ट्रीमराइडर दोनों ही आईडीसोप्लिकेशन लागू करते हैं, और इसे 'ब्लॉक' का उपयोग करके लपेटा जा सकता है। 'ब्लॉक का उपयोग करना' कोशिश के अंत में / / (कोई 'कैच' नहीं) के शब्दार्थ समतुल्य हैं, इसलिए आपका उदाहरण अधिक स्पष्ट रूप से व्यक्त किया जा सकता है:
using (StreamReader reader = new StreamReader("myfile.txt"))
{
int i = 5 / 0;
}
... जो गुंजाइश से बाहर जाने पर स्ट्रीमराइडर उदाहरण को बंद और निपटान करेगा। उम्मीद है की यह मदद करेगा।