다른 사람들이 말했듯이 예외에 초점을 맞추는 것은 실제로 제어 전송의 모호한 처리에 관한 것입니다.
당신은 아마도 다음과 같은 시나리오를 생각하고있을 것입니다.
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;
}
}
}
이 동안 그래서 결론적으로, 그래, 이다 약간의 사용 a의 가능성 continue제어가 전송되지 않는 상황에서,하지만 좋은 거래 (대부분?)의 경우는 예외 또는 포함 return블록. 언어 디자이너는 이것이 너무 모호하고 컴파일 타임 에 제어 흐름이 전송되지 않는 경우 에만continue 사용 된다는 것을 보장하기가 불가능하다고 느꼈습니다 .