web-dev-qa-db-fra.com

Obtenir la valeur Integer d'une énumération qui est un générique

Voici la situation de base.

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

C’est une vaste simplification excessive de la classe actuelle, mais au fond, je sais que T est une énumération (si ce n’est pas le cas, il y aura beaucoup d’autres problèmes et c’est une erreur logique commise par le programmeur).

En gros, je veux obtenir la valeur entière sous-jacente de MyValue.

Utiliser Cint ou Ctype ne fonctionne pas.

27
Ross Goddard

J'allais utiliser un morceau de code de réflexion cool mais juste un simple Convert.ToInt32 fonctionne très bien ... Pardonnez mon VB je suis un gars C #

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

Je l'ai essayé et ça marche:

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

Je sais que vous pouvez effectuer les opérations suivantes pour obtenir toutes les valeurs sous-jacentes (j'espère que ma syntaxe VB est correcte ... Je travaille principalement en C # depuis quelque temps):

Dim intVal As Integer

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

Cela pourrait au moins vous aider à démarrer dans la bonne direction.

3
Jason Down

Cela fonctionne aussi: Fix(enumval) 

1
anefeletos

Un autre moyen simple dans VB.NET est de l'ajouter à 0:

Dim intVal As Integer = 0 + myEnum

Donc, cela devrait fonctionner:

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