जैसा कि दूसरों ने कहा है, लेकिन अपवादों पर ध्यान केंद्रित किया है, यह वास्तव में स्थानांतरण नियंत्रण के अस्पष्ट हैंडलिंग के बारे में है।
आपके दिमाग में, आप शायद इस तरह से एक परिदृश्य के बारे में सोच रहे हैं:
public static object SafeMethod()
{
foreach(var item in list)
{
try
{
try
{
//do something that won't transfer control outside
}
catch
{
//catch everything to not throw exceptions
}
}
finally
{
if (someCondition)
//no exception will be thrown,
//so theoretically this could work
continue;
}
}
return someValue;
}
सैद्धांतिक रूप से, आप नियंत्रण प्रवाह को ट्रैक कर सकते हैं और कह सकते हैं, हां, यह "ठीक" है। कोई अपवाद नहीं फेंका गया है, कोई नियंत्रण स्थानांतरित नहीं किया गया है। लेकिन सी # भाषा डिजाइनरों के दिमाग में अन्य मुद्दे थे।
फेंकता अपवाद
public static void Exception()
{
try
{
foreach(var item in list)
{
try
{
throw new Exception("What now?");
}
finally
{
continue;
}
}
}
catch
{
//do I get hit?
}
}
खूंखार गोटो
public static void Goto()
{
foreach(var item in list)
{
try
{
goto pigsfly;
}
finally
{
continue;
}
}
pigsfly:
}
वापसी
public static object ReturnSomething()
{
foreach(var item in list)
{
try
{
return item;
}
finally
{
continue;
}
}
}
संबंध विच्छेद
public static void Break()
{
foreach(var item in list)
{
try
{
break;
}
finally
{
continue;
}
}
}
तो अंत में, हाँ, जबकि वहाँ है एक मामूली एक उपयोग करने की संभावना continueस्थितियों में, जहां नियंत्रण स्थानांतरित नहीं किया जा रहा है, लेकिन एक अच्छा सौदा मामलों की (बहुमत?) अपवादों या शामिल returnब्लॉकों। भाषा डिजाइनरों ने महसूस किया कि यह बहुत अस्पष्ट होगा और (संभावना) यह सुनिश्चित करना असंभव होगा कि आपका continueउपयोग केवल उन मामलों में किया जाए जहां नियंत्रण प्रवाह स्थानांतरित नहीं हो रहा है।