C#拾遗补漏之goto跳转语句
前言
在我们日常工作中常用的C#跳转语句有break、continue、return,但是还有一个C#跳转语句很多同学可能都比较的陌生就是goto,今天大姚带大家一起来认识一下goto语句及其它的优缺点。
goto语句介绍
- goto 语句由关键字 goto 后跟一个标签名称组成,通过标签名称指定跳转的位置。
- 可以在方法的任何地方放置标签,并且可以多次使用相同的标签。
goto代码使用示例
使用goto进行代码重试示例
/// <summary>
/// 使用goto进行代码重试示例
/// </summary>
public static void GotoRetryUseExample()
{
int retryCount = 0;
for (int i = 0; i < 10; i++)
{
retryLogic:
try
{
//模拟可能出错的操作
Random random = new Random();
int result = random.Next(0, 2);
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进行代码重试示例
/// <summary>
/// 不使用goto进行代码重试示例
/// </summary>
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(0, 2);
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正常输出使用示例
/// <summary>
/// goto正常输出使用示例
/// </summary>
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正常输出使用示例
/// <summary>
/// 不使用goto正常输出使用示例
/// </summary>
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语句的几大优缺点,大家可以根据自己的使用场景谨慎合理的使用。
优点:
- 简化复杂逻辑: 在某些情况下,
goto
可以帮助简化复杂的逻辑流程,减少嵌套结构。 - 跳出多层循环: 可以用于直接跳出多层循环,避免使用额外的标志变量。
缺点:
- 降低可读性: 过度使用
goto
可能会导致代码难以理解,降低代码的可读性。 - 增加维护难度:
goto
可能使代码结构复杂化,增加代码的维护难度。 - 潜在引入bug: 不当使用
goto
可能会引入潜在的错误,打破正常的控制流程。
DotNetGuide技术社区交流群
- DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目推荐、招聘资讯和解决问题的平台。
- 在这个社区中,开发者们可以分享自己的技术文章、项目经验、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
- 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值和成长机会。
C#拾遗补漏之goto跳转语句的更多相关文章
- C#流程控制语句--跳转语句(break,continue,goto,return,)
跳转语句:是程序运行到某一位置时,可以跳到程序中另一个代码的语句.循环控制语句. 跳转语句:break 1.用于退出包含在最内层的循环或者退出一个switch或loop语句,程序流将继续紧接着loop ...
- 跳转语句 break;continue; return; goto 区别用法
C语言是按顺序执行语句的语言——一个接一个.即使它有条件语句或循环语句,程序的流程也是自上而下的.没有顺序流的随机跳转或跳转.但我们的程序是为了满足任何现实世界的需求,一个接一个地执行永远不会很直接. ...
- [C#.NET 拾遗补漏]08:强大的LINQ
大家好,这是 [C#.NET 拾遗补漏] 系列的第 08 篇文章,今天讲 C# 强大的 LINQ 查询.LINQ 是我最喜欢的 C# 语言特性之一. LINQ 是 Language INtegrate ...
- 第二部分 条件控制执行语句、循环语句、switch语句、跳转语句和其它语句
条件控制执行语句: if语句 if....else....语句 循环语句: while语句 do....while语句 for语句 switch语句: 跳转语句: break; continue; r ...
- C#迭代语句、跳转语句--C#基础
1.foreach每执行一次内含的代码时,循环变量就会一次读取集合中的一个元素,不需要个数.循环变量只是一个只读的局部变量,这个值是不能修改的.char后的word是 foreach语句的迭代变量,它 ...
- c++ 跳转语句块
p170~p172:跳转语句:1.break:对while for switcho有效!2.continue:中断当前迭代,但是循环还要继续.因此对while for有效,对switch无效!3.go ...
- ISO/IEC 9899:2011 条款6.8.6——跳转语句
6.8.6 跳转语句 语法 1.jump-statement: goto identifier ; continue ; break ; return expressio ...
- [C#.NET 拾遗补漏]05:操作符的几个骚操作
阅读本文大概需要 1.5 分钟. 大家好,这是极客精神[C#.NET 拾遗补漏]专辑的第 5 篇文章,今天要讲的内容是操作符. 操作符的英文是 Operator,在数值计算中习惯性的被叫作运算符,所以 ...
- [C#.NET 拾遗补漏]07:迭代器和列举器
大家好,这是 [C#.NET 拾遗补漏] 系列的第 07 篇文章. 在 C# 中,大多数方法都是通过 return 语句立即把程序的控制权交回给调用者,同时也会把方法内的本地资源释放掉.而包含 yie ...
- javascript语句——条件语句、循环语句和跳转语句
× 目录 [1]条件语句 [2]循环语句 [3]跳转语句 前面的话 默认情况下,javascript解释器依照语句的编写顺序依次执行.而javascript中的很多语句可以改变语句的默认执行顺序.本文 ...
随机推荐
- 使用svn.externals(外链)提升美术多个svn目录的svn up速度
svn up多个目录耗时大 svn上的美术资源项目,在打包机上对一个很久没有变化的目录进行svn up也是需要消耗不少时间的,特别打包时需要对多个目录进行svn up,比如空跑54个目录的svn up ...
- 系统Hosts文件原理和应用
Hosts的概念 Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要 ...
- 3.2 Windows驱动开发:内核CR3切换读写内存
CR3是一种控制寄存器,它是CPU中的一个专用寄存器,用于存储当前进程的页目录表的物理地址.在x86体系结构中,虚拟地址的翻译过程需要借助页表来完成.页表是由页目录表和页表组成的,页目录表存储了页表的 ...
- CE修改器入门:查找多级指针
本关是第6关的加强版,CE 6.X 教程中的4级指针比5.X的要简单些.多级指针就像玩解谜游戏一样,谜团不只一个,盒子中还有盒子.这里面是4级指针,游戏中也有比如8级指针,12级指针等等,思路都是一样 ...
- Oracle 数据库版本路线图
经常会有客户困惑某个Oracle版本的支持周期,且希望得到确切的官方说明,其实这可以从MOS文档: Release Schedule of Current Database Releases (Doc ...
- 【若归】 【LGR-142-Div.4】洛谷入门赛 #13赛后反思
比赛链接:[LGR-142-Div.4]洛谷入门赛 #13 rk288,比前几次差(可能是因为rated?) A 十年OI一场空,不开long long见祖宗 #include<bits/std ...
- JS leetcode 两数之和解答思路分析
壹 ❀ 引 在学习算法基础的同时,我还是继续捡起leetcode的算法题了,珍惜时间,算法每天进步一点点.不得不说,在了解了一些算法概念后,至少有些答案是能看懂了......(惭愧)虽然我很菜,但是多 ...
- 2023牛客暑期多校训练营3 ABDHJ
比赛链接 A 题解 知识点:数学. 当 \(x = 0\) 时,当且仅当 \(y = 0\) 可行. 当 \(x \neq 0\) 时,一定可行,答案为 \(|x-y|\) . 时间复杂度 \(O(1 ...
- NC200195 区区区间
题目链接 题目 题目描述 \(Keven\) 特别喜欢线段树,他给你一个长度为 \(n\) 的序列,对序列进行 \(m\) 次操作. 操作有两种: 1 \(1\ l\ r\ k\) :表示将下标在 \ ...
- Linux 中竖线“|”与双竖线“||”的意思
linux中竖线'|',双竖线'||',&和&&的意思 对于初学者来说这几个意思可能只知道其中几个的意思,下面我们来看一下. 1.竖线'|' ,在linux中是作为管道符的,将 ...