Ross Goddard
Ross Goddard

Reputation: 4302

Get the Integer value of an enumeration which is a generic

Here is the basic situation.

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

This is vast oversimplification of the actual class, but basically I know that T is an enumeration (if it is not then there will be many other problems, and is a logical error made by the programmer)

Basically I want to get the underlying integer value of MyValue.

Using Cint or Ctype, does not work.

Upvotes: 33

Views: 66519

Answers (6)

Leon Rom
Leon Rom

Reputation: 567

Thanks to 'Jon Skeet'. But his code does not work in my Excel-2016. Minwhile the next code works fine:

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

Upvotes: -1

anefeletos
anefeletos

Reputation: 702

This also works : Fix(enumval)

Upvotes: 1

joshperry
joshperry

Reputation: 42257

I was going to use a cool piece of reflection code but just a simple Convert.ToInt32 works great... Forgive my VB I'm a C# guy

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

Upvotes: 59

Glen Little
Glen Little

Reputation: 7128

Another simple way in VB.NET is to add it to 0:

Dim intVal As Integer = 0 + myEnum

So, this should work:

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

Upvotes: 0

Jason Down
Jason Down

Reputation: 22171

I know you can do the following to get all the underlying values (I hope my VB syntax is correct... I've been working in C# mostly of late):

Dim intVal As Integer

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

That might at least get you started in the right direction.

Upvotes: 4

Ross Goddard
Ross Goddard

Reputation: 4302

I tried this and it worked:

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

Upvotes: 8

Related Questions