Như những người khác đã nêu, nhưng tập trung vào các trường hợp ngoại lệ, đó thực sự là về việc xử lý mơ hồ đối với việc chuyển giao quyền kiểm soát.
Trong đầu bạn, có lẽ bạn đang nghĩ đến một kịch bản như sau:
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;
}
Về mặt lý thuyết, bạn có thể theo dõi luồng điều khiển và nói, có, điều này là "ok". Không có ngoại lệ nào được ném ra, không có quyền kiểm soát nào được chuyển giao. Nhưng các nhà thiết kế ngôn ngữ C # có những vấn đề khác trong tâm trí.
Trường hợp ngoại lệ ném
public static void Exception()
{
try
{
foreach(var item in list)
{
try
{
throw new Exception("What now?");
}
finally
{
continue;
}
}
}
catch
{
//do I get hit?
}
}
The Dreaded Goto
public static void Goto()
{
foreach(var item in list)
{
try
{
goto pigsfly;
}
finally
{
continue;
}
}
pigsfly:
}
Sự trở lại
public static object ReturnSomething()
{
foreach(var item in list)
{
try
{
return item;
}
finally
{
continue;
}
}
}
Sự chia tay
public static void Break()
{
foreach(var item in list)
{
try
{
break;
}
finally
{
continue;
}
}
}
Vì vậy, trong kết luận, có, trong khi đó là một chút khả năng sử dụng một continue
trong các trường hợp kiểm soát không được chuyển nhượng, nhưng một việc tốt (đa số?) Các trường hợp liên quan đến trường hợp ngoại lệ hoặc return
khối. Các nhà thiết kế ngôn ngữ cảm thấy điều này quá mơ hồ và (có khả năng) không thể đảm bảo tại thời điểm biên dịch rằng của bạn chỉcontinue
được sử dụng trong trường hợp luồng điều khiển không được chuyển.