去
goto
可用于跳转到代码内的特定行,由标签指定。
goto
作为:
标签:
void InfiniteHello()
{
sayHello:
Console.WriteLine("Hello!");
goto sayHello;
}
case 语句:
enum Permissions { Read, Write };
switch (GetRequestedPermission())
{
case Permissions.Read:
GrantReadAccess();
break;
case Permissions.Write:
GrantWriteAccess();
goto case Permissions.Read; //People with write access also get read
}
这在 switch 语句中执行多个行为时特别有用,因为 C#不支持 fall-through case 块 。
异常重试
var exCount = 0;
retry:
try
{
//Do work
}
catch (IOException)
{
exCount++;
if (exCount < 3)
{
Thread.Sleep(100);
goto retry;
}
throw;
}
与许多语言类似,不鼓励使用 goto 关键字,但以下情况除外。
适用于 C# 的 goto
的有效用法 :
-
switch 语句中的 fall-through 案例。
-
多级休息。通常可以使用 LINQ,但它通常具有更差的性能。
-
使用未包装的低级对象时的资源释放。在 C#中,低级对象通常应该包含在单独的类中。
-
有限状态机,例如,解析器; 由编译器内部使用生成的 async / await 状态机。