C#拾遗补漏之goto跳转语句
<h2 data-tool="mdnice编辑器"><span class="prefix"><span class="content">前言</span></span></h2><p data-tool="mdnice编辑器">在我们日常工作中常用的C#跳转语句有break、continue、return,但是还有一个C#跳转语句很多同学可能都比较的陌生就是goto,今天大姚带大家一起来认识一下goto语句及其它的优缺点。</p>
<h2 data-tool="mdnice编辑器"><span class="prefix"><span class="content">goto语句介绍</span></span></h2>
<ul data-tool="mdnice编辑器">
<li>goto 语句由关键字 goto 后跟一个标签名称组成,通过标签名称指定跳转的位置。</li>
<li>可以在方法的任何地方放置标签,并且可以多次使用相同的标签。</li>
</ul>
<h2 data-tool="mdnice编辑器"><span class="prefix"><span class="content">goto代码使用示例</span></span></h2>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">使用goto进行代码重试示例</span></span></h3>
<pre class="custom" data-tool="mdnice编辑器"><code class="hljs"> /// <summary><br> /// 使用goto进行代码重试示例<br> /// </summary><br> public static void <span class="hljs-function"><span class="hljs-title">GotoRetryUseExample()<br> {<br> int retryCount = 0;<br> <span class="hljs-keyword">for (int i = 0; i < 10; i++)<br> {<br> retryLogic:<br> try<br> {<br> //模拟可能出错的操作<br> Random random = new Random();<br> int result = random.Next(0, 2);<br><br> <span class="hljs-keyword">if (result == 0)<br> {<br> throw new Exception(<span class="hljs-string">"Error occurred");<br> }<br><br> Console.WriteLine(<span class="hljs-string">"Operation successful on attempt: " + retryCount);<br> }<br> catch (Exception ex)<br> {<br> retryCount++;<br> <span class="hljs-keyword">if (retryCount < 3)<br> {<br> Console.WriteLine(<span class="hljs-string">"Error occurred, retrying...");<br> goto retryLogic; //跳转到重试逻辑<br> }<br> <span class="hljs-keyword">else<br> {<br> Console.WriteLine(<span class="hljs-string">"Max retry limit reached.");<br> <span class="hljs-built_in">return;<br> }<br> }<br> }<br> }<br></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">不使用goto进行代码重试示例</span></span></h3>
<pre class="custom" data-tool="mdnice编辑器"><code class="hljs"> /// <summary><br> /// 不使用goto进行代码重试示例<br> /// </summary><br> public static void <span class="hljs-function"><span class="hljs-title">NonGotoRetryUseExample()<br> {<br> int retryCount = 0;<br> <span class="hljs-keyword">for (int i = 0; i < 10; i++)<br> {<br> <span class="hljs-keyword">while (retryCount < 3)<br> {<br> try<br> {<br> //模拟可能出错的操作<br> Random random = new Random();<br> int result = random.Next(0, 2);<br><br> <span class="hljs-keyword">if (result == 0)<br> {<br> throw new Exception(<span class="hljs-string">"Error occurred");<br> }<br><br> Console.WriteLine(<span class="hljs-string">"Operation successful on attempt: " + retryCount);<br> <span class="hljs-built_in">break;<br> }<br> catch (Exception ex)<br> {<br> retryCount++;<br> Console.WriteLine(<span class="hljs-string">"Error occurred, retrying...");<br> }<br> }<br><br> <span class="hljs-keyword">if (retryCount == 3)<br> {<br> Console.WriteLine(<span class="hljs-string">"Max retry limit reached.");<br> <span class="hljs-built_in">return;<br> }<br> }<br> }<br></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">goto正常输出使用示例</span></span></h3>
<pre class="custom" data-tool="mdnice编辑器"><code class="hljs"> /// <summary><br> /// goto正常输出使用示例<br> /// </summary><br> public static void GotoGeneralUseExample(int num)<br> {<br> <span class="hljs-keyword">if (num < 0)<br> {<br> goto LessThanZero;<br> }<br> <span class="hljs-keyword">else <span class="hljs-keyword">if (num == 0)<br> {<br> goto EqualToZero;<br> }<br> <span class="hljs-keyword">else<br> {<br> goto GreaterThanZero;<br> }<br><br> LessThanZero:<br> Console.WriteLine(<span class="hljs-string">"数字小于零");<br> goto End;<br><br> EqualToZero:<br> Console.WriteLine(<span class="hljs-string">"数字等于零");<br> goto End;<br><br> GreaterThanZero:<br> Console.WriteLine(<span class="hljs-string">"数字大于零");<br> goto End;<br> End:<br> Console.WriteLine(<span class="hljs-string">"End...");<br> }<br></span></span></span></span></span></span></span></span></code></pre>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">不使用goto正常输出使用示例</span></span></h3>
<pre class="custom" data-tool="mdnice编辑器"><code class="hljs"> /// <summary><br> /// 不使用goto正常输出使用示例<br> /// </summary><br> public static void NonGotoGeneralUseExample(int num)<br> {<br> <span class="hljs-keyword">if (num < 0)<br> {<br> Console.WriteLine(<span class="hljs-string">"数字小于零");<br> }<br> <span class="hljs-keyword">else <span class="hljs-keyword">if (num == 0)<br> {<br> Console.WriteLine(<span class="hljs-string">"数字等于零");<br> }<br> <span class="hljs-keyword">else<br> {<br> Console.WriteLine(<span class="hljs-string">"数字大于零");<br> }<br> Console.WriteLine(<span class="hljs-string">"End...");<br> }<br></span></span></span></span></span></span></span></span></code></pre>
<h2 data-tool="mdnice编辑器"><span class="prefix"><span class="content">goto语句的优缺点</span></span></h2>
<blockquote class="multiquote-1" data-tool="mdnice编辑器">
<p>通过上述代码示例我们可以总结如下goto语句的几大优缺点,大家可以根据自己的使用场景谨慎合理的使用。</p>
</blockquote>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">优点:</span></span></h3>
<ol data-tool="mdnice编辑器">
<li><strong>简化复杂逻辑:</strong> 在某些情况下,<code>goto</code> 可以帮助简化复杂的逻辑流程,减少嵌套结构。</li>
<li><strong>跳出多层循环:</strong> 可以用于直接跳出多层循环,避免使用额外的标志变量。</li>
</ol>
<h3 data-tool="mdnice编辑器"><span class="prefix"><span class="content">缺点:</span></span></h3>
<ol data-tool="mdnice编辑器">
<li><strong>降低可读性:</strong> 过度使用 <code>goto</code> 可能会导致代码难以理解,降低代码的可读性。</li>
<li><strong>增加维护难度:</strong> <code>goto</code> 可能使代码结构复杂化,增加代码的维护难度。</li>
<li><strong>潜在引入bug:</strong> 不当使用 <code>goto</code> 可能会引入潜在的错误,打破正常的控制流程。</li>
</ol>
<h2 id="activity-name" class="rich_media_title ">DotNetGuide技术社区交流群</h2>
<ul>
<li>DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目推荐、招聘资讯和解决问题的平台。</li>
<li>在这个社区中,开发者们可以分享自己的技术文章、项目经验、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。</li>
<li>我们致力于构建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值和成长机会。</li>
</ul>
<blockquote>
<p id="activity-name" class="rich_media_title "><strong>欢迎加入DotNetGuide技术社区微信交流群👪</strong></p>
</blockquote>
</div>
<div id="MySignature" role="contentinfo">
<blockquote >
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者名称:</span>追逐时光者</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者简介:</span>一个热爱编程、善于分享、喜欢学习、探索、尝试新事物和新技术的全栈软件工程师。</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'>
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如果该篇文章对您有帮助的话,可以点一下右下角的【♥推荐♥】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确的地方,欢迎指正或补充,不胜感激。
</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/Can-daydayup/p/18055426
頁:
[1]