【发布时间】:2011-08-18 23:13:57
【问题描述】:
我正在阅读一篇有趣的文章 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 语句,在每种情况下都带有 dropthrough 和 consequentrequirements for a break,有点笨拙。他们有什么理由没有增强 switch 命令来允许这些情况?无论如何,dropthrough什么时候有用?有人知道该构造的任何扩展以提供更大的灵活性吗?
干杯
【问题讨论】:
-
switch结构在 C 方言语言中非常有限。这可以说是因为 switch(在一些小的值上,比如 0-255)可以 变成直接跳转并完全避免条件 - 再加上贯穿语义(C# 没有),它对(“ASCII”)字符处理等很有用。真正的问题是——为什么 C# 和 VB.NET 都不支持像 F#、Scala 或 Haskell 这样更通用(和更高级别)的 模式匹配 构造? :-) -
我很确定具有超过 7 个元素的 switch 语句(在 C# 中)实际上在编译时转换为字典(哈希表)。散列像“Is > 50”这样的谓词将是一个非常有趣的问题。
-
我不明白接近投票。这是一个有效的问题。 VB.NET 比 C# 有更多功能是有历史原因的,也有一些原因不能以相同的效率在内部实现更强大的功能,但实际上没有什么能阻止编译器实现这种类型的功能,即使CLR 没有。很高兴听到编译器团队中的某个人或了解有关此问题的任何讨论的知识,以了解为什么这实际上没有实现。也许就像 C# 开发人员真的不关心这个功能一样简单。
-
@Samuel Neff - 我也会投票结束。这是一个讨论点,而不是一个问题。这很有趣,但(再次)这不是一个真正的问题。
标签: c# vb.net language-design language-features