去
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 狀態機。