获取枚举的Integer值,该枚举是通用的

时间:2008-12-18 18:48:57

标签: vb.net generics enums

这是基本情况。

Public Class MyEnumClass(of T)
   Public MyValue as T
End Class

这是对实际类的过度简化,但基本上我知道T是一个枚举(如果不是那么会有很多其他问题,并且是程序员做出的逻辑错误)

基本上我想获得MyValue的基础整数值。

使用Cint或Ctype不起作用。

6 个答案:

答案 0 :(得分:50)

我打算使用一段很酷的反射代码,但只是一个简单的Convert.ToInt32效果很好......原谅我的VB我是一个C#人

Public Function GetEnumInt(Of T)(enumVal As T) As Integer
    Return Convert.ToInt32(enumVal)
End Function

答案 1 :(得分:7)

我试过这个并且有效:

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

答案 2 :(得分:3)

我知道您可以执行以下操作来获取所有基础值(我希望我的VB语法是正确的......我一直在使用C#主要是最近的):

Dim intVal As Integer

For Each intVal In  [Enum].GetValues(GetType(T))
    //intValue is now the enum integer value
Next

这至少可以让你开始朝着正确的方向前进。

答案 3 :(得分:1)

这也有效: f

答案 4 :(得分:0)

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

Dim intVal As Integer = 0 + myEnum

所以,这应该有效:

Sub GetEnumInt(of T)(enumVal as T) as Int
   return 0 + enumVal
End Sub

答案 5 :(得分:-1)

感谢'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