VB.Net Switch Statement, включайте сегмент кода в каждом случае - PullRequest
0 голосов
/ 17 мая 2018

Итак, я пишу программу на VB.Net, и у меня есть простой вопрос об утверждении Select / Case, на который я не могу найти ответ. Так что сейчас мой чехол выглядит примерно так:

Select Case numColumns
    Case 0
        numColumns = numColumns + 1
        'Some code
    Case 1
        numColumns = numColumns + 1
        'Some different code
    Case 2
        numColumns = numColumns + 1
        'Some even more different code
    Case Else
        'Do Nothing
End Select

По сути, мне нужно иметь оператор numColumns = numColumns + 1 в каждом случае , за исключением для Case Else. Есть ли способ сделать это, не добавляя одинаковую строку кода в каждый оператор Case?

Самое простое решение, о котором я могу подумать, - это, возможно, иметь оператор if перед моим выбором и делать там приращение, но мне интересно, есть ли способ сделать это с помощью строки Case All или чего-то подобного.

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

вы можете попробовать запустить его с шагом

numColumns = numColumns + 1
Select Case numColumns - 1
    Case 0
        'Some code
    Case 1
        'Some different code
    Case 2
        'Some even more different code
    Case Else
        numColumns = numColumns - 1
        'Do Nothing
End Select
0 голосов
/ 17 мая 2018

Просто еще один пример.

Private _numColumns As Integer

Public Property NumColumns As Integer
Get
    Return _numColumns 
End Get
Private Set(value As Integer)

    _numColumns = value

    '**************************************
    'NOTE: You could place your Select Case statement here (I don't recommend doing this though).
    'Maybe add logic to see if "value" is less than or greater a "_minColumn" and "_maxColumn" constant before assigning it (constants are not declared in this sample).
    '**************************************

End Set
End Property

Private Sub IncrementNumColumns()
    NumColumns += 1
End Sub

'Not currently used -- Here as an example. 
Private Sub DecrementNumColumns()
    NumColumns -= 1
End Sub

Private Function CodeSharedByAllColumnFunctions(p_myParam1 As Object, p_myParam2 As Object) As Integer
    IncrementNumColumns()
    'Maybe return some other result here. Otherwise change this to a Sub()
    'If nothing in Process1Column(), Process2Column(), and Process3Column() is reusable, then -
    ' add the IncrementNumColumns() to each method.
End Function

Private Sub Process1Column(p_myParam1 As Object, p_myParam2 As Object)
   Dim _someReusableCalculationResult = CodeSharedByAllColumnFunctions(p_myParam1, p_myParam2)
  'Some more code that unique to a single column
End Sub

Private Sub Process2Column(p_myParam1 As Object, p_myParam2 As Object)
     Dim _someReusableCalculationResult = CodeSharedByAllColumnFunctions(p_myParam1, p_myParam2)
    'Some more code that unique to 2 columns
End Sub

Private Sub Process3Column(p_myParam1 As Object, p_myParam2 As Object)
     Dim _someReusableCalculationResult = CodeSharedByAllColumnFunctions(p_myParam1, p_myParam2)
    'Some more code that unique to 3 columns
End Sub

Private Sub ProcessNumColumns() 
    Dim _someValue1, _someValue2 As Object
    _someValue1 = New With {.something = "abc"}
    _someValue2 = New With {.something = "123"}

Private Sub ProcessNumColumns() 
    Dim _someValue1, _someValue2 As Object
    _someValue1 = New With {.something = "abc"}
    _someValue2 = New With {.something = "123"}

    'Personally I wouldn't use a Select case here. I would use reflection to determine the correct method to call. 
    'I think that's outside of the scope of your question though.
    '
    'For the sake of readability, please do your best to keep the code within each Case to a minimum.
    'If possible, PLEASE avoid nested Select Case statements.
    Select Case NumColumns
        Case 0
            Process1Column(_someValue1, _someValue2)
        Case 1
            Process2Column(_someValue1, _someValue2)
        Case 2
            Process3Column(_someValue1, _someValue2)
    End Select
End Sub
0 голосов
/ 17 мая 2018

Это должно работать:

Select Case numColumns
    Case 0 To 2
        numColumns = numColumns + 1
        'Some code
    Case Else
        'Do Nothing
End Select

Edit:

Вы можете решить эту проблему с помощью дополнительного Select/Case, если считаете его более красивым, чем If заявление до:

Select Case numColumns
    Case 0 To 2
        numColumns = numColumns + 1

        Select Case numColumns
            Case 0
                'Some code
            Case 1
                'Some different code
            Case 2
                'Some even more different code
        End Select
    Case Else
        'Do Nothing
End Select

И если вы действительно «ничего не делаете» в Else -части, то вы можете полностью его опустить.

...