নিম্নলিখিতটি ঠিক আছে:
try
{
Console.WriteLine("Before");
yield return 1;
Console.WriteLine("After");
}
finally
{
Console.WriteLine("Done");
}
finally
ব্লক যখন পুরো জিনিস নির্বাহ সমাপ্ত হয়েছে (রান IEnumerator<T>
সমর্থন IDisposable
এই এমনকি যখন শুমার পরিত্যক্ত নিশ্চিত করার আগে এটি শেষ একটি উপায় প্রদান)।
তবে এটি ঠিক নয়:
try
{
Console.WriteLine("Before");
yield return 1; // error CS1626: Cannot yield a value in the body of a try block with a catch clause
Console.WriteLine("After");
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
মনে করুন (যুক্তি দেখানোর জন্য) WriteLine
চেষ্টা করুন ব্লকের মধ্যে একটি বা অন্য কল দ্বারা একটি ব্যতিক্রম ছুঁড়ে দেওয়া হয়েছে । catch
ব্লকে ফাঁসি কার্যকর করতে সমস্যা কী ?
অবশ্যই, ফলন ফেরতের অংশটি (বর্তমানে) কোনও কিছু ফেলতে অক্ষম, তবে কেন এটি আমাদের কোনও ঘের try
/ আটকের catch
আগে বা পরে ফেলে দেওয়া ব্যতিক্রমগুলি মোকাবেলা করা থেকে বিরত রাখবে yield return
?
আপডেট: এখানে এরিক লিপার্টের একটি আকর্ষণীয় মন্তব্য রয়েছে - দেখে মনে হচ্ছে তাদের ইতিমধ্যে চেষ্টা / শেষ অবধি আচরণটি সঠিকভাবে প্রয়োগ করতে পর্যাপ্ত সমস্যা রয়েছে!
সম্পাদনা: এই ত্রুটিটির এমএসডিএন পৃষ্ঠাটি হ'ল: http://msdn.microsoft.com/en-us/library/cs1x15az.aspx । যদিও এটি ব্যাখ্যা করে না।