1

这可能是一个密集的问题,我发现它不是这个问题的副本但我需要一些帮助来了解数组是否可以在 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 语句并评估每个语句的任何见解?

4

3 回答 3

3

您可能需要考虑在此处使用 if 子句而不是 switch。试试这个逻辑:如果进攻线包含 playerPosition,那么进攻线,等等。

于 2009-12-14T23:05:25.770 回答
3

你实际上可以使用一个Select语句:

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

于 2016-01-21T02:36:28.507 回答
2

Select..Case构造不是那样工作的。但是,很容易测试一个元素是否存在于数组中:

If offensiveLine.Contains(playerPosition) Then
    'Do something
ElseIf defensiveLine.Contains(playerPosition) Then
    'Do something else
End If
于 2010-01-10T01:18:31.437 回答