Вопрос

это может быть сложный вопрос, и я не считаю, что это дублирование этот, но мне нужна некоторая помощь в понимании того, можно ли использовать массив в операторе 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top