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

时间:2011-05-04 23:46:49

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

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

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

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命令来允许这些情况?什么时候会有用呢?任何人都知道构造的任何扩展以允许更大的灵活性吗?

干杯

3 个答案:

答案 0 :(得分:19)

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

C#中的切换语法比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;
}

答案 1 :(得分:6)

我记得曾经告诉过我们一位普通讲师,他曾经发现的唯一有用的事情就是写出圣诞节十二天的歌词。

这些方面的东西

for (int i = 1; i <= 5; i++) {
    Console.WriteLine("On the " + i + " day of christmast my true love gave to me");
    switch (i) {
    case 5:
        Console.WriteLine("5 Gold Rings");
        goto case 4;
    case 4:
        Console.WriteLine("4 Colly Birds");
        goto case 3;
    case 3:
        Console.WriteLine("3 French Hens");
        goto case 2;
    case 2:
        Console.WriteLine("2 Turtle Doves");
        goto case 1;
    case 1:
        Console.WriteLine("And a Partridge in a Pear Tree");
        break;
    }
    Console.WriteLine("-");
}

10年后,我倾向于同意他的看法。当时我们正在做java,它不得不伪装成C#。

答案 2 :(得分:2)

允许匹配多个案例的特殊情况下降,但不允许比较和范围情况。所以:

int condition = 55;
switch (condition) {
  case 1: case 3: case 4: case 5: case 10: case 12: case 14:
    // value 55 doesn't execute here anymore

  default:
    //values <1, 2, 6-9, 11, 13, >14
}