Как заявляли другие, но сосредоточены на исключениях, на самом деле речь идет о неоднозначной обработке передачи управления.
Вы, вероятно, думаете о таком сценарии:
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;
}
Теоретически вы можете отследить поток управления и сказать «да, это нормально». Исключение не создается, управление не передается. Но у разработчиков языка C # были другие проблемы.
Выброшенное исключение
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блоки. Разработчики языка посчитали, что это будет слишком двусмысленно и (вероятно) невозможно гарантировать во время компиляции, что your continueиспользуется только в тех случаях, когда поток управления не передается.