Передайте в массив, чтобы выбрать регистр
-
19-09-2019 - |
Вопрос
это может быть сложный вопрос, и я не считаю, что это дублирование этот, но мне нужна некоторая помощь в понимании того, можно ли использовать массив в операторе Select Case.
У меня есть подпрограмма, с помощью которой я буду динамически создавать массив строк.XML также указан в списке, но это может быть любое из значений, перечисленных ниже.Это будет что-то вроде этого:
Dim offensiveLine() As String = New String() {"center", "right wing", "left wing"}
Dim defensiveLine As String = "defense"
Dim playerInfo = <Player><Name>John</Name><Position val="right wing"/></Player>
Что я хочу сделать, так это посмотреть, находится ли этот игрок на одной из линий нападения.Поэтому я говорю:
Dim playerPosition = playerInfo.Position.@val
Select Case playerPosition
Case offensiveLine
'do something
Case defensiveLine
'do something
Case Else
'do nothing
End Select
Вот в чем заключается проблема: Case offensiveLine
является недействительным.Я знаю, что мог бы написать Case "center", "right wing", "left wing"
, но это противоречило бы цели того, что я пытаюсь сделать, а именно создать обобщенную переменную, представляющую собой массив, из которого можно читать в операторе Case.Во-вторых, я знаю, что не могу создать переменную типа Dim offensiveLine = ""center", "right wing", "left wing""
и передайте это нам.
Есть какие-нибудь идеи о том, как я могу передать массив в оператор Case и оценить каждый из них?
Решение
Тот Самый Select..Case
конструкция работает совсем не так.Однако легко проверить, существует ли элемент в массиве:
If offensiveLine.Contains(playerPosition) Then
'Do something
ElseIf defensiveLine.Contains(playerPosition) Then
'Do something else
End If
Другие советы
Возможно, вы захотите использовать здесь предложение if вместо переключателя.Попробуйте эту логику:если наступательная линия содержит playerPosition, то линия нападения и т. д.
На самом деле вы можете использовать Select/Switch:
Dim playerPosition = playerInfo.Position.@val
Select Case True
Case offensiveLine.Contains(playerPosition)
'do something
Case defensiveLine.Contains(playerPosition)
'do something
Case Else
'do *something* - otherwise you don't need the 'Case Else'
End Select
Хитрость заключается в значении «True» в первой строке Select.