Vb.net 获取属于泛型的枚举的整数值

Vb.net 获取属于泛型的枚举的整数值,vb.net,generics,enums,Vb.net,Generics,Enums,基本情况如下 Public Class MyEnumClass(of T) Public MyValue as T End Class 这是对实际类的极大简化,但基本上我知道T是一个枚举(如果不是,则会有许多其他问题,并且是程序员所犯的逻辑错误) 基本上我想要得到MyValue的底层整数值 使用Cint或Ctype不起作用。我尝试了这个方法,但效果很好: String.Format("{0:d}", MyValue) 我知道你可以做以下操作来获得所有的底层值(我希望我的VB语法是正确的

基本情况如下

Public Class MyEnumClass(of T)
   Public MyValue as T
End Class
这是对实际类的极大简化,但基本上我知道T是一个枚举(如果不是,则会有许多其他问题,并且是程序员所犯的逻辑错误)

基本上我想要得到MyValue的底层整数值


使用Cint或Ctype不起作用。

我尝试了这个方法,但效果很好:

String.Format("{0:d}", MyValue)

我知道你可以做以下操作来获得所有的底层值(我希望我的VB语法是正确的……我最近一直在用C#工作):


这至少可以让您开始正确的方向。

我本来打算使用一段很酷的反射代码,但只是一个简单的代码就很好了。。。原谅我的VB我是个C#guy


VB.NET中的另一种简单方法是将其添加到0:

Dim intVal As Integer = 0 + myEnum
因此,这应该是可行的:

Sub GetEnumInt(of T)(enumVal as T) as Int
   return 0 + enumVal
End Sub
这也适用于:
Fix(enumval)
多亏了“Jon Skeet”。但他的代码在我的Excel-2016中不起作用。当下一个代码正常工作时:

Public Enum TypOfProtectWs
    pws_NotFound = 0
    pws_AllowAll = 1
    pws_AllowFormat = 2
    pws_AllowNone = 3
End Enum

Private Function TypOfProtectWs2I(pws As TypOfProtectWs) As Integer
    TypOfProtectWs2I = Format("0", pws)
End Function

Private Sub test_TypOfProtectWs2I()
    Debug.Print TypOfProtectWs2I(pws_AllowAll)
End Sub

我完全错误地将枚举理解为IEnumerable:(这会将其转换为字符串-我以为您希望它是整数?当
myEnum
是泛型类型参数类型时,这将不起作用,因为编译器不知道它是否实际是枚举,因此不会使用typecheck运算符
+
Sub GetEnumInt(of T)(enumVal as T) as Int
   return 0 + enumVal
End Sub
Public Enum TypOfProtectWs
    pws_NotFound = 0
    pws_AllowAll = 1
    pws_AllowFormat = 2
    pws_AllowNone = 3
End Enum

Private Function TypOfProtectWs2I(pws As TypOfProtectWs) As Integer
    TypOfProtectWs2I = Format("0", pws)
End Function

Private Sub test_TypOfProtectWs2I()
    Debug.Print TypOfProtectWs2I(pws_AllowAll)
End Sub