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

我在这里读了一篇有趣的文章,它对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命令来允许这些情况? 无论如何,什么时候会有用呢? 任何人都知道构造的任何扩展,以允许更多的灵活性?

干杯

在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; } 

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

沿着这些方向的东西

 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#。

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

 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 }