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