- A+
所属分类:.NET技术
goto 语句 可以无条件转移到程序中的标签指定的位置,由标识符加上冒号构成,语法如下:
goto 标签名; 代码块1; 标签名: 代码块2;
例子:
/// <summary> /// 例子:使用goto /// </summary> static void Simple1() { loop: var num = new Random().Next(0, 10); Console.WriteLine($"num:{num}"); if (num % 2 == 0) // 如果是偶数,则跳过中间代码,直接运行 jump标签 后的代码 goto jump; Console.WriteLine("== Coding =="); jump: Console.WriteLine("Hello World!!!"); if (num % 2 != 0) { Console.WriteLine(); // 如果不是偶数,则运行 loop标签 后的代码 goto loop; } Console.ReadLine(); }
PS:
1.运行到标签名后面的代码【代码块2】就会执行,并不是只有跳转才会执行
2.跳转【goto】标签时,中间的代码不会被执行,标签名后的代码块会被执行一次,逻辑有问题容易形成死循环
/// <summary> /// 例子:死循环 /// </summary> static void SimpleEndlessLoop() { loop: Console.WriteLine("Hello World!!!"); goto loop; Console.ReadLine(); }
3.标签名 必须和 goto 在同一起,无法跨方法和类
4.goto 可以跳出循环,但不能跳入循环
/// <summary> /// 例子:goto在循环中的使用 /// </summary> static void SimpleFor() { for (int i = 0; i < 9; i++) { Console.WriteLine($"i={i}"); goto loop; } loop: Console.WriteLine("Hello World!!!"); Console.ReadLine(); }
5.goto 可以在switch中跳入别的case中
/// <summary> /// 例子:goto在 switch 中的使用 /// </summary> static void SimpleSwitch() { loop: var num = new Random().Next(0, 10); switch (num) { case 1: Console.WriteLine("Hello World!!!"); break; default: Console.WriteLine($"num={num}"); // goto 可以在switch中跳入别的case中 if (num % 2 == 0) gotocase 1; break; } if (num % 2 != 0) { Console.WriteLine(); // 如果不是偶数,则运行 loop标签 后的代码 goto loop; } Console.ReadLine(); }