আপনার উদাহরণগুলির মধ্যে কার্যকর পার্থক্য যতক্ষণ না ব্যতিক্রম ছোঁড়া হয় ততক্ষণ উপেক্ষিত।
তবে, 'চেষ্টা' ধারাটিতে থাকাকালীন যদি একটি ব্যতিক্রম ছুঁড়ে দেওয়া হয়, তবে প্রথম উদাহরণটি এটি পুরোপুরি গ্রাস করবে। দ্বিতীয় উদাহরণটি কল স্ট্যাকের পরবর্তী ধাপের ব্যতিক্রম বাড়িয়ে তুলবে, সুতরাং বর্ণিত উদাহরণগুলির মধ্যে পার্থক্যটি হ'ল একটি সম্পূর্ণভাবে কোনও ব্যতিক্রম (প্রথম উদাহরণ) অস্পষ্ট করে, এবং অন্যটি (দ্বিতীয় উদাহরণ) পরবর্তী সময়ে পরিচালনা করার ক্ষেত্রে ব্যতিক্রম সম্পর্কিত তথ্য ধরে রাখে এখনও 'অবশেষে' ধারাটিতে সামগ্রীটি কার্যকর করা হচ্ছে।
উদাহরণস্বরূপ, যদি আপনি প্রথম উদাহরণটির 'ক্যাচ' ধারাটিতে কোড স্থাপন করেন যা একটি ব্যতিক্রম ছুঁড়েছিল (হয় প্রাথমিকভাবে উত্থাপিত এক, অথবা একটি নতুন), পাঠক ক্লিনআপ কোডটি কখনই কার্যকর করবে না। 'ধরা' ধারাটিতে যা ঘটেছিল তা বিবেচনা না করে অবশেষে সম্পাদন করে ।
সুতরাং, 'ধরা' এবং 'অবশেষে' এর মধ্যে প্রধান পার্থক্যটি হ'ল 'অবশেষে' ব্লকের সামগ্রীগুলি (কয়েকটি বিরল ব্যতিক্রম সহ) কার্যকর করার নিশ্চয়তা হিসাবে বিবেচনা করা যেতে পারে, এমনকি অপ্রত্যাশিত ব্যতিক্রমের পরেও, কোনও কোড অনুসরণ করলে একটি 'ক্যাচ' ধারা (তবে একটি 'অবশেষে' দফার বাইরে) এই ধরনের গ্যারান্টি বহন করবে না।
ঘটনাক্রমে, স্ট্রিম এবং স্ট্রিমরিডার উভয়ই আইডিস্পোজেবল বাস্তবায়ন করে এবং একটি 'ব্যবহার করে' ব্লকে মোড়ানো যায়। 'ব্যবহার' ব্লকগুলি চেষ্টা / শেষ অবধি (কোনও 'ধরা' নয়) এর অর্থসূচক সমতুল্য, সুতরাং আপনার উদাহরণটি আরও নিখুঁতভাবে প্রকাশ করা যেতে পারে:
using (StreamReader reader = new StreamReader("myfile.txt"))
{
int i = 5 / 0;
}
... যা স্ট্রিমরিডার উদাহরণটি বন্ধের বাইরে চলে যাবে এবং নিষ্পত্তি করবে। আশাকরি এটা সাহায্য করবে.