Pregunta

Esto puede ser una pregunta densa y no estoy encontrando que sea un DUP de éste , pero necesito un poco de ayuda con la comprensión de si una matriz se puede utilizar en una instrucción Select Case.

Tengo una sub-rutina que voy a crear una matriz de cadenas de forma dinámica. El XML también aparece en la lista, pero podría ser cualquiera de los valores indicados a continuación. Será algo como esto:

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>

Lo que quiero hacer es ver si este jugador se encuentra en uno de los offensiveLine. Por eso digo:

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

Aquí radica la cuestión es: Case offensiveLine no es válido. Sé que podría escribir Case "center", "right wing", "left wing", pero eso sería contrario al propósito de lo que estoy tratando de hacer, que es hacer una variable generalizada que es una matriz que se puede leer en la caja en un comunicado. En segundo lugar, sé que no puedo crear una variable como Dim offensiveLine = ""center", "right wing", "left wing"" y pasar de que en.

Cualquier idea sobre cómo puedo ser capaz de pasar de una matriz a una instrucción Case y hacer que cada uno evaluado?

¿Fue útil?

Solución

La construcción Select..Case no funciona de esa manera. Sin embargo, es fácil de probar si existe un elemento de una matriz:

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

Otros consejos

Es posible que desee considerar el uso de una cláusula if aquí en lugar de un interruptor. Pruebe esta lógica:. OffensiveLine si contiene playerPosition, a continuación, la línea ofensiva, etc

En realidad se puede utilizar un Seleccionar / 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

El truco es la 'verdadera' en la primera línea de la Selección.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top