2009-12-14 42 views
1

這可能是一個密集的問題,我沒有發現它是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> 

我想要做的就是看這個球員是在offensiveLine之一。所以我說:

Dim playerPosition = [email protected] 
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

爲什麼數組而不是Enum? – Lazarus 2009-12-14 22:08:48

+0

好問題,我沒有想到這一點。你是否認爲Enum會在這裏做同樣的事情,也就是說我可以有一個枚舉,它會有3個字符串值,並且我只傳入枚舉名稱中的所有三個要評估的值? – 2009-12-14 22:13:49

回答

2

Select..Case構造不能像那樣工作。然而,很容易測試,如果在數組中存在的元素:在第一線

Dim playerPosition = [email protected] 
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 

的訣竅是「真」:

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

工程就像一個魅力,偉大的建議! – 2010-01-10 01:58:25

3

您可能要考慮在這裏使用if子句而不是開關。試試這個邏輯:如果offensiveLine包含playerPosition,然後是進攻線等。

+0

感謝諾拉。我可以這樣做,但特別是如果一個數組可以傳遞到交換機。強類型的選擇數組可以是Case表列表的一部分(如:Case「one」,「two」,「three」)。我有同樣的需要,我只需要動態地傳遞它而不是強類型。 – 2009-12-18 18:04:09

1

實際上,你可以使用一個選擇器/開關選擇。