VB.NET 中的 GoTo 语句和替代语句

2024-02-14

我在另一个论坛上发布了一个代码片段寻求帮助,人们向我指出使用GoTo语句是非常糟糕的编程习惯。我想知道:为什么会不好呢?

有什么替代方案GoTo在 VB.NET 中是否可以使用通常被认为是更好的实践?

考虑下面的这个片段,用户必须输入他们的出生日期。如果月/日/年无效或不切实际,我想返回并再次询问用户。 (我正在使用 if 语句来检查整数的大小...如果有更好的方法来执行此操作,如果您也能告诉我,我将不胜感激:D)

retryday:
    Console.WriteLine("Please enter the day you were born : ")
    day = Console.ReadLine
    If day > 31 Or day < 1 Then
        Console.WriteLine("Please enter a valid day")
        GoTo retryday
    End If

我要与其他人不同的是,GOTO 本身并不都是邪恶的。罪恶来自于对 GOTO 的滥用。

一般来说,几乎总是有比使用 GOTO 更好的解决方案,但有时 GOTO 确实是正确的方法。

话虽这么说,你是一个初学者,所以在接下来的几年里,你不应该被允许判断 GOTO 是否正确(因为它几乎从来没有正确过)。

我会这样写你的代码(我的VB有点生疏了......):

Dim valid As Boolean = False

While Not valid
    Console.WriteLine("Please enter the day you were born: ")

    Dim day As String

    day = Console.ReadLine

    If day > 31 Or day < 1 Then
        Console.WriteLine("Please enter a valid day.")
    Else
        valid = True
    End If
End While

如果您查看 GOTO 代码并查看它,人们首先会如何处理您的代码? “嗯..重试日?这有什么作用?什么时候发生?哦,所以如果日期超出范围,我们就转到该标签。好的,所以我们要循环,直到日期被认为是有效且在范围内” 。

而如果你看看我的:

“哦,我们想继续这样做直到它有效。当日期在范围内时它是有效的。”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VB.NET 中的 GoTo 语句和替代语句 的相关文章

  • WPF DataGrid 验证/绑定模式错误

    我创建了一个非常简单的新项目 仅测试 Microsoft WPF DataGrid 行为 不涉及其他 我只使用标准的 DataGrid
  • Outlook 加载项,无法读取未定义的属性“BeginRequestEventArgs”

    我使用 Visual Studio 开发了 Outlook 插件 我的插件有一个按钮 用于填充会议邀请正文中的详细信息并添加所需的与会者 这在 99 的情况下都有效 但是 时不时地它会给我下面的 JavaScript 错误 Uncaught
  • 通过名称访问表单的控件

    不确定这篇文章的标题是否准确 我试图通过在循环中 组合 它们的名称来访问 Windows 窗体控件及其属性 但我似乎找不到相关文档 使用VB net 基本上 假设我有以下内容 Dim myDt As New DataTable Dim ro
  • 需要将用户名和密码添加到 VB.NET Web 服务客户端中的 SOAP 标头

    我需要查询一个进行基本身份验证的 Web 服务 将用户名和密码放在请求标头中 我的客户端是用 VB NET Visual Basic Express Edition 2010 编写的 我已将 Web 服务添加到服务引用中 它为我自动生成了合
  • vb.net - 多维数组列表

    我已经设法制作了一些单维数组列表 但我无法找出多维数组列表 这就是我想做的 我有一个包含 5 列的数据库 mdb 我希望每一行都位于数组列表中 在 PHP 中我通常会做的是 array field1 array field2 field3
  • ODP.Net - OracleDataReader.读取速度非常慢

    我在 ODP Net 中的 OracleDataReader 方面遇到很多麻烦 基本上 我有一个参数化查询 需要 1 5 秒的时间来运行 返回大约 450 条记录 然后需要 60 90 秒的时间来循环 甚至没有代码在循环中运行 实际上是迭代
  • VB.NET - 有没有办法在委托中使用可选参数? (或者计划允许这样做?)

    据我了解 在 VS2008 附带的 VB 版本中 委托中不可能有可选参数 但是 我想知道将来是否有任何解决方法或计划将此功能合并到 VB NET 中 我想做的事 Public Delegate Function Deserializer O
  • 您可以将委托函数作为可选参数传递吗?

    我知道在 Visual Basic 中 委托函数不能contain可选参数 但是方法可以将委托作为可选参数吗 我想做的是这样的 Delegate Sub MyDelegate ByVal input As String Sub MyDele
  • 如何使用 VB.NET 或 C#.NET 代码从 yahoo 邮件 ID 发送邮件

    我想从我的 yahoomail Id 发送邮件 如何使用 VB NET 或 C NET 代码从 yahoo mail Id 发送邮件 需要善意的帮助 提前谢谢 西瓦库马尔 以下是一些制作基本 html 电子邮件消息的示例 http help
  • 检测 404 而不捕获异常

    简单功能 检查网络服务器是否返回非 200 HTTP 状态 Private Function RemoteFileOk ByVal Url As String As Boolean Dim req As HttpWebRequest Try
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 检查按钮是否可用?如果没有,请等待 5 秒钟,然后再次检查?

    基本上我想看看此刻是否可以单击按钮 如果没有我想再试一次 所以我需要某种 goto 函数来返回到代码的前一行 尽管我怀疑我写得非常糟糕 但它本来可以做得更容易 try driver findElement By xpath button i
  • .tostring() 保留前导零[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 转换对象
  • 需要帮助将 C# 转换为 VB

    我正在看this https web archive org web 20200815114302 http geekswithblogs net NewThingsILearned archive 2008 01 16 listcolle
  • Gridview rowdatabound访问数据项vb

    我正在尝试将 ImageUrl 指向 GridView 中模板字段中的图像 但不断收到错误 你调用的对象是空的 在这一行 Dim imagePath As String rowView image path 我以前从未在 GridView
  • .NET框架,Windows XP

    我们使用 Visual Studio 2012 构建了一个应用程序 它可以在任何 Windows 7 或 Vista 计算机 32 位或 64 位 上完美运行 但是 当我尝试在 Win XP 计算机上运行该应用程序时 我得到以下信息 系统组
  • 计算文本框中换行的行数

    我在文本框中有一行文本 并且换行为多行 如何计算文本框中换行的行数 你可以使用String Split int lineCount txt Text Split new n r StringSplitOptions None Length
  • Windows 服务应用程序中自托管 ASP.NET Web API 的问题

    我在网上看到了一些文章 描述了如何在 Windows 服务应用程序中自行托管 ASP NET Web API 请参阅here http www piotrwalat net hosting web api in windows servic
  • 使用 VB.NET 覆盖文本文件中的特定行

    我需要执行以下操作 更改文本文件中的行 Path c this certain path 用这条线 Path c that other newer path 这些路径的长度肯定会不同 因此我需要替换引号中的内容 或者完全擦除该行并输入一个新
  • 通过 Tab 键浏览 XML 文档字段

    In VB NET you can move through the fields in the XML member documentation with the Tab key 这在 C 中不起作用 还有其他方法吗 除了用鼠标将光标放在

随机推荐

  • AngularJS - 过滤空对象

    我有一个包含大量数据的 scope myData 对象 我想做的是显示数据但过滤掉空值和空字符串 scope myData ID 001 Message test test test test ID 002 Message test tes
  • 禁用先前日期但将字段留空?

    我正在设置minDate now 以防止选择当前日期之前的日期 但是 这会使用当前日期填充该字段 不一定是大问题 但是 如果我在字段上执行验证 即 它已填充 那么即使没有选择日期 用户仍然可以提交 有什么办法解决这个问题吗 编辑 抱歉 但似
  • 从 C# 流中读取无符号 24 位整数

    使用 BinaryReader 从 C 流读取无符号 24 位整数的最佳方法是什么 到目前为止我用过这样的东西 private long ReadUInt24 this BinaryReader reader try return Math
  • 安装 Tidy、PHP

    我猜当 php 安装在我的盒子上时 没有包含 with tidy arg 当浏览我的 php ini 时 该行 extension php tidy dll 不见了 如何将模块添加到我的 php 安装中 注意我尝试添加 extension
  • Vaadin 网格行高

    我想减小单元格大小 以便在屏幕上容纳更多行 屏幕 1 到目前为止我已经用过 v grid cell font size 13px height 18px vertical align middle v grid row height 18p
  • android - 在两个网络视图之间共享会话?

    首先 有人可以解释一下怎么做吗CookieManager getInstance 工作 我真的不明白如何从 webview 获取会话 假设我有这个 CookieSyncManager createInstance WebviewPage t
  • 全局和本地 python 安装,以及意外在 virtualenv 之外运行需求文件

    所以我在谷歌上搜索了一个 pip 需要 sudo 权限的事件 我遇到了以下两个线程运行 sudo pip 有哪些风险 https stackoverflow com questions 21055859 what are the risks
  • 通过文本和文件流保存 openpyxl 文件

    我正在将 OpenPyXL 构建到一个应用程序中 该应用程序需要一个包含 excel 文件内容的字符串 以便通过文件流写入 根据我对 OpenPyXL 源代码的调查 它看起来并不支持这种输出 有谁有修改 openpyxl 以支持这一点的经验
  • 如何检查特定的子解析器?

    如何检查特定的子解析器 import argparse if name main mainparser argparse ArgumentParser submainadder mainparser add subparsers title
  • Javascript:根据其内容选择选项

    基本上是这样 但是在纯 JavaScript 中 如何使用 Nokogiri 根据选择标签的内容获取选择标签的 值 https stackoverflow com questions 2346257 how to get value of
  • 判断 NSNumber 是否为 NaN

    如何判断可可是否NSNumber表示 NaN 不是一个数字 例如 当我解析具有无效 非数字 内容的字符串时 就会出现这种情况 所以 我发现类属性 NSDecimalNumber notANumber 就是为了这个目的 在某些语言中 NaN
  • 按 ID DESC 排序

    我试图让博客页面按降序给出的自动递增唯一 ID 对其条目进行排序 但它似乎不允许这样做 尽管 SQL 请求如下所示 但它始终按升序显示 SELECT FROM news blog ORDER BY news id DESC 是不是因为新闻i
  • 我可以配置 NLog 在日志达到一定限制后修剪日志吗?

    NLog 可以配置为在日志文件达到一定文件大小后自动修剪 修剪日志文件吗 我认为您最接近的目标是使用archiveAboveSize属性让 NLog 在日志文件达到一定大小时对其进行归档 通过将其与maxArchiveFiles属性 您可以
  • 请解释一下Labeled statements的用法

    Java 中标记语句的唯一用途是中断和继续吗 您什么时候在程序中使用过标签语句 抱歉 代码片段已被删除 我正在拆分问题 JLS 14 7 标签语句 https docs oracle com javase specs jls se14 ht
  • ASP.NET MVC 自定义 ModelMetadataProvider 和 ModelValidatorProvider

    在我的 ASP NET MVC 应用程序中 我在数据库中定义了基于元数据的模型 我有一个定义数据元数据的自定义对象 并使用数据集进行 DTO 为了显示这一点 我计划编写一个自定义 ModelMetadataProvider 和 ModelV
  • 在 PyCUDA 中迭代二维数组

    我试图在 PyCUDA 中迭代一个 2D 数组 但最终得到了重复的数组值 我最初抛出一个小的随机整数数组 它按预期工作 但是当我向它抛出图像时 我一遍又一遍地看到相同的值 这是我的代码 img np random randint 20 si
  • 为什么这个查询使用where而不是索引?

    EXPLAIN EXTENDED SELECT board FROM board WHERE board category id 5 AND board board id 0 AND board display 1 ORDER BY boa
  • 应用 Angular2 ngModel 后格式化输入值

    我正在尝试创建一个指令 将输入值格式化为货币格式 我能够在焦点和模糊上做我必须做的事情 并且在 ngOnInit 钩子 和任何其他钩子 中 输入元素尚未应用任何值 如何 监视 输入的值 并在应用初始值时对其进行格式化 这是我的指令 impo
  • CloudFormation:模板 RDS Mysql 以创建数据库、表、用户或加载架构

    我正在尝试使用 CloudFormation 找出一些用例 第一种情况是拥有现有的 AWS RDS MySQL 服务器 如何通过 CloudFormation 模板创建数据库 表和用户帐户 在查看了 Cloudformation 文档之后
  • VB.NET 中的 GoTo 语句和替代语句

    我在另一个论坛上发布了一个代码片段寻求帮助 人们向我指出使用GoTo语句是非常糟糕的编程习惯 我想知道 为什么会不好呢 有什么替代方案GoTo在 VB NET 中是否可以使用通常被认为是更好的实践 考虑下面的这个片段 用户必须输入他们的出生