如何比较枚举?
How to compare enums?
我在检查我的枚举是否相等时遇到很多问题。
我的枚举是这样声明的:
Public Enum POKEMON_VERSION
RED_BLUE_YELLOW = 1
GOLD_SILVER = 2
...
End Enum
我的表格是这样的:
Const pokemonVersion As Variant = POKEMON_VERSION.GOLD_SILVER
Public Sub Search_ButtonClick()
Dim sql As String
sql = Get_Pokemon(pokemonVersion ) 'which is GOLD_SILVER
Me.mySubform.Form.RecordSource = sql
Me.mySubform.Requery
End Sub
这是我遇到问题的方法,我的 switch 语句:
Public Function Get_Pokemon( version As Variant ) As String
Select Case version
Case version = RED_BLUE_YELLOW
' don't get ability or nature, didn't exist in this version
Get_Pokemon = "SELECT * FROM ..."
Case version = GOLD_SILVER
Get_Pokemon = "SELECT * FROM ..."
End Select
End Function
但是当我运行程序时,它发现version
在我的任何情况下都不匹配(在这个例子中,应该匹配GOLD_SILVER)。我认为问题可能是我正在比较 Variant
和 Enum
的 "value"。
我该如何解决这个问题?
我不介意更改 Const pokemonVersion
的类型,但枚举的 "value" 确实需要存储在 Const
变量中,这是最好的我能弄清楚。
问题与 Const
或 Enum
无关。它与您的 Select
语法有关。您正在根据 version
选择,因此个案需要是枚举的成员。当您执行此操作时(为清楚起见添加了括号)...
Case (version = RED_BLUE_YELLOW)
...它评估为...
Case (version = 1)
...所以如果您将 RED_BLUE_YELLOW
传递给 version
,您会得到...
Case (1 = 1)
...即:
Case True
'...
Case False
'...
Case False
'etc.
您可以更改 Select
以打开 True
...
Public Function Get_Pokemon(version As POKEMON_VERSION) As String
Select Case True
Case version = RED_BLUE_YELLOW
' don't get ability or nature, didn't exist in this version
Get_Pokemon = "SELECT * FROM ..."
Case version = GOLD_SILVER
Get_Pokemon = "SELECT * FROM ..."
End Select
End Function
...或使用下面更清晰和有效的语法:
Public Function Get_Pokemon(version As POKEMON_VERSION) As String
Select Case version
Case RED_BLUE_YELLOW
' don't get ability or nature, didn't exist in this version
Get_Pokemon = "SELECT * FROM ..."
Case GOLD_SILVER
Get_Pokemon = "SELECT * FROM ..."
End Select
End Function
我在检查我的枚举是否相等时遇到很多问题。
我的枚举是这样声明的:
Public Enum POKEMON_VERSION
RED_BLUE_YELLOW = 1
GOLD_SILVER = 2
...
End Enum
我的表格是这样的:
Const pokemonVersion As Variant = POKEMON_VERSION.GOLD_SILVER
Public Sub Search_ButtonClick()
Dim sql As String
sql = Get_Pokemon(pokemonVersion ) 'which is GOLD_SILVER
Me.mySubform.Form.RecordSource = sql
Me.mySubform.Requery
End Sub
这是我遇到问题的方法,我的 switch 语句:
Public Function Get_Pokemon( version As Variant ) As String
Select Case version
Case version = RED_BLUE_YELLOW
' don't get ability or nature, didn't exist in this version
Get_Pokemon = "SELECT * FROM ..."
Case version = GOLD_SILVER
Get_Pokemon = "SELECT * FROM ..."
End Select
End Function
但是当我运行程序时,它发现version
在我的任何情况下都不匹配(在这个例子中,应该匹配GOLD_SILVER)。我认为问题可能是我正在比较 Variant
和 Enum
的 "value"。
我该如何解决这个问题?
我不介意更改 Const pokemonVersion
的类型,但枚举的 "value" 确实需要存储在 Const
变量中,这是最好的我能弄清楚。
问题与 Const
或 Enum
无关。它与您的 Select
语法有关。您正在根据 version
选择,因此个案需要是枚举的成员。当您执行此操作时(为清楚起见添加了括号)...
Case (version = RED_BLUE_YELLOW)
...它评估为...
Case (version = 1)
...所以如果您将 RED_BLUE_YELLOW
传递给 version
,您会得到...
Case (1 = 1)
...即:
Case True
'...
Case False
'...
Case False
'etc.
您可以更改 Select
以打开 True
...
Public Function Get_Pokemon(version As POKEMON_VERSION) As String
Select Case True
Case version = RED_BLUE_YELLOW
' don't get ability or nature, didn't exist in this version
Get_Pokemon = "SELECT * FROM ..."
Case version = GOLD_SILVER
Get_Pokemon = "SELECT * FROM ..."
End Select
End Function
...或使用下面更清晰和有效的语法:
Public Function Get_Pokemon(version As POKEMON_VERSION) As String
Select Case version
Case RED_BLUE_YELLOW
' don't get ability or nature, didn't exist in this version
Get_Pokemon = "SELECT * FROM ..."
Case GOLD_SILVER
Get_Pokemon = "SELECT * FROM ..."
End Select
End Function