将数组传递给选择案例

时间:2009-12-14 22:05:49

标签: vb.net linq select-case

这可能是一个密集的问题,我发现它不是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语句并对每个语句进行评估的任何见解?

3 个答案:

答案 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'。