0

ステートメントで、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>ます。

これを行う主な理由は、状況が正しい場合 (見方によっては間違っている場合) にテスト条件が例外をスローするケースを書きたいからです。前提条件が true の場合は、これらのケースをスキップしたいと思います。

編集(2/2)

私が求めていることは、現在の VB のイテレーションでは不可能であることは明らかです。そこで、.NET 開発チームに機能要求を送信できる場所を探したところ、ユーザーボイス プラットフォームがあることがわかりました。

簡単に言うと、これを実装したい場合は、このページの投票ボタンをタップしてください: https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4274712-add-when-keyword-サポートから選択ケースの統計

4

2 に答える 2

0

2 つのブール値の代わりに列挙型を使用することで、2 つの条件チェックを実行するために必要な if ステートメントは 1 つだけになります。このようなもの:

Public Enum Include
    Odd = 1
    Even = 2
    Both = 0
End Enum
Private Sub PrintNumbers(includenumbers As Include)
    For I = 1 To 10
        If includenumbers = Include.Both OrElse I Mod 2 = includenumbers Mod 2 Then
            TextBox2.AppendText(I.ToString)
        End If
    Next
End Sub

次のように呼び出します。

PrintNumbers(Include.Odd)
于 2013-08-07T04:59:48.177 に答える
0

linq の例:

    Dim condition As Predicate(Of Integer) = Nothing
    If includeEvenNumbers Then
        condition = Function(x) x Mod 2 = 0
    Else
        condition = Function(x) x Mod 2 = 1
    End If

    For Each item In Enumerable.Range(0, 8).Where(condition)
        ' do what ever you like here...
    Next

編集:簡単にするために:

For Each item In Enumerable.Range(0, 8).Where(Function(x) x Mod 2 = If(includeEvenNumbers, 0, 1))
    ' do what ever you like here...
Next
于 2013-08-07T03:28:03.650 に答える