Передать в массиве, чтобы выбрать регистр - PullRequest
1 голос
/ 15 декабря 2009

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

Ответы [ 3 ]

3 голосов
/ 15 декабря 2009

Возможно, вы захотите использовать здесь условие if, а не switch. Попробуйте эту логику: если offensiveLine содержит playerPosition, то наступательную линию и т. Д.

2 голосов
/ 21 января 2016

Вы действительно можете использовать 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

Трюк - это «Истина» в первой строке выбора.

2 голосов
/ 10 января 2010

Конструкция Select..Case не работает таким образом. Однако легко проверить, существует ли элемент в массиве:

If offensiveLine.Contains(playerPosition) Then
    'Do something
ElseIf defensiveLine.Contains(playerPosition) Then
    'Do something else
End If
...