这可能是一个密集的问题,我发现它不是this one的副本,但我需要一些帮助来理解是否可以在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语句并对每个语句进行评估的任何见解?
答案 0 :(得分:3)
您可能需要考虑在此使用if子句而不是开关。试试这个逻辑:如果offensiveLine包含playerPosition,那么攻击线等等。
答案 1 :(得分:2)
Select..Case
构造不起作用。但是,很容易测试数组中是否存在元素:
If offensiveLine.Contains(playerPosition) Then
'Do something
ElseIf defensiveLine.Contains(playerPosition) Then
'Do something else
End If
答案 2 :(得分:2)
您实际上可以使用选择/切换:
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
技巧是Select的第一行中的'True'。