zl程序教程

您现在的位置是:首页 >  其他

当前栏目

AspNet goto 语句

2023-03-31 10:57:11 时间

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

5.1. default 相当于系统自带标签,也可以用 goto 跳转,但只能在 switch 中使用

        /// <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();
        }