这可能是一个棘手的问题,我不认为它是一个重复 这个, ,但我需要一些帮助来了解数组是否可以在 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 子句而不是 switch。试试这个逻辑:如果进攻线包含playerPosition,则进攻线等。

您实际上可以使用选择/开关:

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”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top