【发布时间】:2013-08-07 01:32:02
【问题描述】:
在Select...Case 语句中,有没有办法根据先决条件跳过案例?
我现在在做什么,举一个非常愚蠢的例子:
Private Sub PrintNumbers(includeEvenNumbers As Boolean, includeOddNumbers As Boolean)
For number As Integer = 0 To 9
Select Case number
Case 0, 2, 4, 6, 8
If includeEvenNumbers Then
Console.WriteLine(number)
End If
Case 1, 3, 5, 7, 9
If includeOddNumbers Then
Console.WriteLine(number)
End If
End Select
Next
End Sub
有时我什至会把我的案例从里到外写出来:
Private Sub PrintNumbers(includeEvenNumbers As Boolean, includeOddNumbers As Boolean)
For number As Integer = 0 To 9
Select Case True
Case includeEvenNumbers
If number Mod 2 = 0 Then
Console.WriteLine(number)
End If
Case includeOddNumbers
If number Mod 2 <> 0 Then
Console.WriteLine(number)
End If
End Select
Next
End Sub
我真正想做的是:
Private Sub PrintNumbers(includeEvenNumbers As Boolean, includeOddNumbers As Boolean)
For number As Integer = 0 To 9
Select Case number
Case 0, 2, 4, 6, 8 When includeEvenNumbers
Console.WriteLine(number)
Case 1, 3, 5, 7, 9 When includeOddNumbers
Console.WriteLine(number)
End Select
Next
End Sub
请注意,我使用了When 关键字,目前仅在Try...Catch 块中使用。
这可以吗?我应该与谁交谈才能实现这一目标?
编辑 (1/2)
重要的是此代码将首先评估When <expression>。只有当它评估为True,它才会继续评估Case <expression>。
我想这样做的主要原因是因为我想编写测试条件在情况正确(或错误,取决于你如何看待它)时抛出异常的案例。如果前提条件为真,我想跳过这些情况。
编辑 (2/2)
现在很清楚,我所要求的在当前的 VB 迭代中是不可能的。所以我搜索了一个地方来向 .NET 开发团队提交功能请求,然后发现他们有一个用户语音平台。
长话短说:如果您希望看到这个实现,请点击此页面上的投票按钮:https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4274712-add-when-keyword-support-to-select-case-stat
【问题讨论】:
-
可能我没有准确理解您的意思 - 为什么不使用 linq 而不是 Select-Case 语句?
-
另一种选择是直接跳过
Select,然后执行If includeEvenNumbers AndAlso number Mod 2 = 0 Then Console.WriteLine(number) Else If includeOddNumbers AndAlso number Mod 2 <> 0 Then Console.WriteLine(number) End If之类的操作? -
@Rex 您如何将 linq 融入其中?
-
@Tim 这实际上是我在真实代码中所做的。不是上面那个愚蠢的例子。我只是不喜欢有 3+
ElseIfs 在你本来可以使用开关但不能使用的地方。
标签: vb.net select-case