• C#拾遗补漏之goto跳转语句


    前言

    在我们日常工作中常用的C#跳转语句有break、continue、return,但是还有一个C#跳转语句很多同学可能都比较的陌生就是goto,今天大姚带大家一起来认识一下goto语句及其它的优缺点。

    goto语句介绍

    • goto 语句由关键字 goto 后跟一个标签名称组成,通过标签名称指定跳转的位置。
    • 可以在方法的任何地方放置标签,并且可以多次使用相同的标签。

    goto代码使用示例

    使用goto进行代码重试示例

            /// 
            /// 使用goto进行代码重试示例
            /// 
            public static void GotoRetryUseExample()
            {
                int retryCount = 0;
                for (int i = 0; i < 10; i++)
                {
                retryLogic:
                    try
                    {
                        //模拟可能出错的操作
                        Random random = new Random();
                        int result = random.Next(02);
    
                        if (result == 0)
                        {
                            throw new Exception("Error occurred");
                        }
    
                        Console.WriteLine("Operation successful on attempt: " + retryCount);
                    }
                    catch (Exception ex)
                    {
                        retryCount++;
                        if (retryCount < 3)
                        {
                            Console.WriteLine("Error occurred, retrying...");
                            goto retryLogic; //跳转到重试逻辑
                        }
                        else
                        {
                            Console.WriteLine("Max retry limit reached.");
                            return;
                        }
                    }
                }
            }
    

    不使用goto进行代码重试示例

            /// 
            /// 不使用goto进行代码重试示例
            /// 
            public static void NonGotoRetryUseExample()
            {
                int retryCount = 0;
                for (int i = 0; i < 10; i++)
                {
                    while (retryCount < 3)
                    {
                        try
                        {
                            //模拟可能出错的操作
                            Random random = new Random();
                            int result = random.Next(02);
    
                            if (result == 0)
                            {
                                throw new Exception("Error occurred");
                            }
    
                            Console.WriteLine("Operation successful on attempt: " + retryCount);
                            break;
                        }
                        catch (Exception ex)
                        {
                            retryCount++;
                            Console.WriteLine("Error occurred, retrying...");
                        }
                    }
    
                    if (retryCount == 3)
                    {
                        Console.WriteLine("Max retry limit reached.");
                        return;
                    }
                }
            }
    

    goto正常输出使用示例

            /// 
            /// goto正常输出使用示例
            /// 
            public static void GotoGeneralUseExample(int num)
            {
                if (num < 0)
                {
                    goto LessThanZero;
                }
                else if (num == 0)
                {
                    goto EqualToZero;
                }
                else
                {
                    goto GreaterThanZero;
                }
    
            LessThanZero:
                Console.WriteLine("数字小于零");
                goto End;
    
            EqualToZero:
                Console.WriteLine("数字等于零");
                goto End;
    
            GreaterThanZero:
                Console.WriteLine("数字大于零");
                goto End;
            End:
                Console.WriteLine("End...");
            }
    

    不使用goto正常输出使用示例

            /// 
            /// 不使用goto正常输出使用示例
            /// 
            public static void NonGotoGeneralUseExample(int num)
            {
                if (num < 0)
                {
                    Console.WriteLine("数字小于零");
                }
                else if (num == 0)
                {
                    Console.WriteLine("数字等于零");
                }
                else
                {
                    Console.WriteLine("数字大于零");
                }
                Console.WriteLine("End...");
            }
    

    goto语句的优缺点

    通过上述代码示例我们可以总结如下goto语句的几大优缺点,大家可以根据自己的使用场景谨慎合理的使用。

    优点:

    1. 简化复杂逻辑: 在某些情况下,goto 可以帮助简化复杂的逻辑流程,减少嵌套结构。
    2. 跳出多层循环: 可以用于直接跳出多层循环,避免使用额外的标志变量。

    缺点:

    1. 降低可读性: 过度使用 goto 可能会导致代码难以理解,降低代码的可读性。
    2. 增加维护难度: goto 可能使代码结构复杂化,增加代码的维护难度。
    3. 潜在引入bug: 不当使用 goto 可能会引入潜在的错误,打破正常的控制流程。

    DotNetGuide技术社区交流群

    • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目推荐、招聘资讯和解决问题的平台。
    • 在这个社区中,开发者们可以分享自己的技术文章、项目经验、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
    • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值和成长机会。

    欢迎加入DotNetGuide技术社区微信交流群👪

  • 相关阅读:
    S-Clustr(影子集群) 重磅更新!黑入工业PLC设备!
    python基于PHP+MySQL的学生社团管理系统
    ArrayList和LinkedList
    专精特新!2024年湖北省专精特新中小企业申报奖励、申报条件整理
    2022年经典散文:滚烫的石板
    Linux从0到1——Linux第一个小程序:进度条
    maven构建拉依赖Malformed \uxxxx encoding
    【1024程序员节特刊】算法题目易错之处干货总结
    1515_人月神话阅读笔记_20年后的人月神话_下篇
    torch.nn中LSTM使用
  • 原文地址:https://www.cnblogs.com/Can-daydayup/p/18055426