c# switch 语句比 vb.net 'case' 更受限制

标签 c# vb.net language-design language-features

<分区>

我正在阅读一篇有趣的文章 here它提出了一个关于 vb.net 中的“case”语句与 C# 中的“switch”语句的有趣观点,我已将其粘贴在下面:

以下 Visual Basic Select Case 语句无法在 C# 中用单个 switch 语句表示:

Dim Condition As Integer = 55
Select Case Condition
  Case 1, 3 To 5, 10, 12, 14, Is > 50
    'value 55 executes code here
  Case Else
    'values <1, 2, 6-9, 11, 13, 15-49
End Select

我一直发现 C# 中的 switch 语句有点笨拙,在每种情况下都有直通和相应的中断要求。有什么理由他们没有增强 switch 命令来允许这些情况? dropthrough 什么时候有用?任何人都知道构造的任何扩展以允许更大的灵 active ?

干杯

最佳答案

在 C# 中,您只能在大小写中使用不同的值。这使得它更受限制,但另一方面它使它更快,因为它可以使用哈希查找来实现。

C# 中的 switch 语法比 C/C++ 中更受限制。您仍然可以做同样的事情,但是不会隐含地失败,您必须编写一个特定的跳转到下一个案例。此限制的原因是错误跌倒比故意跌倒更常见。

在 C# 中,您需要在默认情况下使用 if 语句来处理范围:

int condition = 55;
switch (condition) {
  case 1:
  case 3:
  case 4:
  case 5:
  case 10:
  case 12:
  case 14:
    // values 1, 3-5, 10, 12, 14
    break;
  default:
    if (condition > 50) {
      // value 55 executes code here
    } else {
      // values <1, 2, 6-9, 11, 13, 15-49
    }
    break;
}

关于c# switch 语句比 vb.net 'case' 更受限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5891143/

相关文章:

c# - C# 中的可变字段

vb.net - 异步等待超时

xml - 在 vb net 中从 XML 中获取值

vb.net - 覆盖列表(Of)。添加行为

c - Rust 的函数参数语法相对于 C 的目的是什么?

c# - 将 foreach 循环更改为 Parallel.ForEach 和奇怪的错误

c# - 将自定义系统光标重置为正常

c++ - 为什么隐式复制构造函数调用基类复制构造函数而定义的复制构造函数不调用?

c++ - 没有歧义的命名空间规范

c# - 我如何使用反射处理数组