Diğerlerinin belirttiği gibi, ancak istisnalara odaklandı, bu gerçekten kontrolün aktarılmasının belirsiz bir şekilde ele alınmasıyla ilgili.
Aklınızda, muhtemelen böyle bir senaryo düşünüyorsunuz:
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;
}
Teorik olarak, kontrol akışını izleyebilir ve evet, bu "tamam" diyebilirsiniz. Hiçbir istisna atılmaz, kontrol aktarılmaz. Ancak C # dili tasarımcılarının akıllarında başka sorunlar vardı.
Atılan İstisna
public static void Exception()
{
try
{
foreach(var item in list)
{
try
{
throw new Exception("What now?");
}
finally
{
continue;
}
}
}
catch
{
//do I get hit?
}
}
Korkunç Goto
public static void Goto()
{
foreach(var item in list)
{
try
{
goto pigsfly;
}
finally
{
continue;
}
}
pigsfly:
}
Geri dönüş
public static object ReturnSomething()
{
foreach(var item in list)
{
try
{
return item;
}
finally
{
continue;
}
}
}
Ayrılık
public static void Break()
{
foreach(var item in list)
{
try
{
break;
}
finally
{
continue;
}
}
}
Orada iken Yani sonuç olarak, evet, olan bir hafif bir kullanma imkanı continuekontrolü aktarılıyor olmadığı durumlarda, ama iyi bir anlaşma (çoğunluk?) Vakalarının istisnalar dahil olduğu veya returnbloklar. Dil tasarımcıları bunun çok belirsiz olduğunu ve derleme sırasında sizin yalnızca kontrol akışının aktarılmadığı durumlarda continuekullanılmasını sağlamanın (muhtemelen) imkansız olacağını düşündüler .