VB.NET 将 Select Case 语句堆叠在一起,就像在 Switch C#/Java 中一样

Posted

技术标签:

【中文标题】VB.NET 将 Select Case 语句堆叠在一起,就像在 Switch C#/Java 中一样【英文标题】:VB.NET Stacking Select Case Statements together like in Switch C#/Java 【发布时间】:2014-05-22 00:17:41 【问题描述】:

似乎如果我将这些案例堆叠在一起,它们就不能作为一个整体工作。 由于 VB.NET Cases 不需要使用 Exit Select / Return 它似乎会在每次检测到新 Case 时自动将它放在它下面?

Dim Test as Integer = 12

Select Case Test
  Case 11
  Case 12
  Case 13
    MsgBox.Show("Could be 11 or 12 or 13?")
End Select

它似乎只工作 13 个作品..

Gotta always remember this rule that you can't stack Cases like this from now on 移植应用时不容易记住。`

【问题讨论】:

dotnet perls site 让我陷入同样的​​错误...... 哈哈,是的,有人必须向该网站报告他们弄错了 如果你认为 C 的做法是“正确的”,而任何不像 C 的做法是“错误的”,它只会“不起作用”。您不妨说 VB 不起作用,因为用大括号标记循环的开始和结束会给您一条错误消息。 :-) 【参考方案1】:

你的理解是正确的。 VB 不会“失败”。

指定一个 Case 并用逗号分隔每个表达式:

Select Case Test
    Case 11, 12, 13
        MsgBox.Show("Could be 11 or 12 or 13?")
End Select

或者,您可以使用带有 To 关键字的范围来完成同样的事情:

Select Case Test
    Case 11 To 13
        MsgBox.Show("Could be 11 or 12 or 13?")
End Select

有关详细信息,请参阅the documentation。

【讨论】:

谢谢他们应该让它检测到上面的模式,如果它们都是空的同样的东西,但是你将再次失去将它用作忽略过滤器的能力。 这有待商榷。我可能会同意,因为我已经习惯了这种模式,但它可能会让许多 VB 人感到困惑。考虑这样一种情况,在这种情况下,您在调试期间注释掉了一个语句。因为 VB 不需要“中断”,所以很难解释新行为 - 为什么它开始失败。这不是显式行为,看代码也不清楚。 是的,现在我想起来了,他们可能不应该将其更改为 now tbh,因为它是 BASIC 从一开始就如何运作的一部分,而且它似乎用一个更好的功能来弥补这一点开关并没有刚刚看到相关线程中的<> 比较非常强大的东西。 Gotta always remember this rule that you can't stack them from now on it's not easy to remember it when porting applications.

以上是关于VB.NET 将 Select Case 语句堆叠在一起,就像在 Switch C#/Java 中一样的主要内容,如果未能解决你的问题,请参考以下文章

带有 case OR-ing 的 VB.NET 选择 case 语句逻辑是啥?

我正在尝试使用 sql select & vb .net 执行下一个语句

在 vb.net 中选择 Case vs Datatable.findrow 性能

vb.net 中如何使用SQL语句查询数据库中的数据

将多个 CASE 语句合并为一个并 SELECT INTO 临时表

选择Case语句和数据验证