如何比较枚举?

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)。我认为问题可能是我正在比较 VariantEnum 的 "value"。

我该如何解决这个问题?

我不介意更改 Const pokemonVersion 的类型,但枚举的 "value" 确实需要存储在 Const 变量中,这是最好的我能弄清楚。

问题与 ConstEnum 无关。它与您的 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