Goto em CSharp , você conhece?
- #.NET C#
A instrução de salto denominada goto, consta na documentação oficial, mais especificamente no item "Referência da linguagem" e está descrita juntamente com as outras instruções de salto como o break, continue e return.
A instrução goto transfere o controle para uma instrução marcada por um rótulo, ou seja, podemos nomear uma label em qualquer parte do código e atribuir a ela através da instrução de salto goto o controle para sair de whiles ou ifs por exemplo.
Vejamos abaixo um exemplo de código onde o rotulo é atribuído ao Enum "CoffeeChoice.Plain" que está no inicio do switch, que logo receberá o controle caso esse mesmo controle entre em "offeeChoice.WithMilk" ou "offeeChoice.WithMilk".
using System;
public enum CoffeeChoice
{
Plain,
WithMilk,
WithIceCream,
}
public class GotoInSwitchExample
{
public static void Main()
{
Console.WriteLine(CalculatePrice(CoffeeChoice.Plain)); // output: 10.0
Console.WriteLine(CalculatePrice(CoffeeChoice.WithMilk)); // output: 15.0
Console.WriteLine(CalculatePrice(CoffeeChoice.WithIceCream)); // output: 17.0
}
private static decimal CalculatePrice(CoffeeChoice choice)
{
decimal price = 0;
switch (choice)
{
case CoffeeChoice.Plain:
price += 10.0m;
break;
case CoffeeChoice.WithMilk:
price += 5.0m;
goto case CoffeeChoice.Plain;
case CoffeeChoice.WithIceCream:
price += 7.0m;
goto case CoffeeChoice.Plain;
}
return price;
}
}
Ressalta-se que se um determinado rótulo fornecido não houver um nome válido ou se a instrução goto estive fora do escopo do rótulo, ocorrerá um erro em tempo de compilação.
font:
"https://learn.microsoft.com/pt-br/dotnet/csharp/language-reference/statements/jump-statements"
image: https://linuxhint.com/wp-content/uploads/2022/05/C-Goto.png