Question

cela peut être une question dense et je ne trouve pas que ce soit un dup de celui-ci , mais j'ai besoin d'aide pour comprendre si un tableau peut être utilisé dans une instruction Select Case.

J'ai une sous-routine que je vais créer un tableau de chaînes dynamiquement. Le XML est également dans la liste, mais il pourrait être l'une des valeurs indiquées ci-dessous. Ce sera quelque chose comme ceci:

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>

Ce que je veux faire est de voir si ce joueur est dans l'un des offensiveLine. Alors je dis:

Dim playerPosition = playerInfo.Position.@val
Select Case playerPosition
Case offensiveLine
'do something
Case defensiveLine
'do something
Case Else 
'do nothing
End Select

Ici se trouve est la question: Case offensiveLine est invalide. Je sais que je pourrais écrire Case "center", "right wing", "left wing", mais irait à l'encontre de ce que je suis en train de faire, ce qui est de faire une variable généralisée qui est un tableau qui peut être lu à partir dans une déclaration de cas. Deuxièmement, je sais que je ne peux pas créer une variable comme Dim offensiveLine = ""center", "right wing", "left wing"" et passer que.

Toute idée sur la façon dont je peux être en mesure de passer dans un tableau à une déclaration de cas et ont chacun évalué?

Était-ce utile?

La solution

La construction de Select..Case ne fonctionne pas comme ça. Cependant, il est facile de tester si un élément existe dans un tableau:

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

Autres conseils

Vous pouvez envisager d'utiliser une clause if ici plutôt que d'un commutateur. Essayez cette logique. Si offensiveLine contient playerPosition, puis la ligne offensive, etc

Vous pouvez réellement utiliser 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

L'astuce est dans la première ligne « Vrai » de la sélection.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top