如何检查枚举类型

How to check for enum type

我有一个函数可以检查参数中的枚举类型(我有超过 7 种枚举类型)和 returns 基于它的图像,但它不起作用。

像这样

       Enum TrophyType
            Gold
            Silver
            Bronze
        End Enum
        Enum Bla
             Bla1
             ....
        End Enum

       Public Shared Function InquireForImage(item As [Enum]) As BitmapImage
            Dim image As New BitmapImage
            Select Case item
                case TrophyType.Gold
                'return specific image
                case TrophyType.Silver
                 'return image
                case Bla.Bla1
                 'return image

            End Select
        End Function

任何帮助将不胜感激

将函数定义更改为以下内容并将所有枚举值放入 TrophyType。

Public Shared Function InquireForImage(item As TrophyType) As BitmapImage

我建议使用不同的重载:

   Public Shared Function InquireForImage(item As TrophyType) As BitmapImage
        Select Case item
            Case TrophyType.Gold
                Return LoadImage(...)
            Case TrophyType.Silver
                Return LoadImage(...)
            ...
        End Select
   End Function

   Public Shared Function InquireForImage(item As Bla) As BitmapImage
        Select Case item
            Case Bla.bla1
                Return LoadImage(...)
            ...
        End Select
   End Function

我认为这比尝试在代码中确定枚举类型更简洁。在这里,编译器为您完成所有工作。确保将所有图像加载逻辑放入单独的 LoadImage 方法中,这样当您有多个 InquireForImage 重载时就不需要重复自己了。


仅供参考:如果您确实需要一个接受多种不同枚举类型的方法,您可以使用显式类型检查来区分它们:

Public Function InquireForImage(ByVal item As [Enum]) As String
    If TypeOf item Is TrophyType Then
        Select Case DirectCast(item, TrophyType)
            Case TrophyType.Gold
                Return ...
            Case TrophyType.Silver
                Return ...
            ...
        End Select

    ElseIf TypeOf item Is Bla Then
        ...

    End If
End Function

然而,一般来说,重载应该是首选(见上文)。

我设法得到了很多方法(感谢@Heinzi) 一个好方法是使用这个

Public Shared Function InquireForImage(item As [Enum]) As BitmapImage
            Dim image As New BitmapImage
            Select Case item.GetType
                Case Is = GetType(TrophyType)
                    'that was my target as i wanted to use the wpf's [Resources(name)]
                    image = MainWindow.GetImageFromResources("tr_" & item.ToString())

            End Select

            Return image
        End Function
'Update -----------------------------------------------------
    Select Case item.GetType
                    Case Is = GetType(TrophyType)

                    Case Is = GetType(CamouFlages)
                        Select Case DirectCast([Enum].Parse(GetType(CamouFlages), item.ToString), CamouFlages)
                            Case CamouFlages.Default_Camo
                                imagename = "Default_Camo"
                            ' etc ....
                        End Select

                    Case Else
                        Return Nothing

                End Select