2008-12-18 8 views
23

Voici la situation de base.Récupère la valeur Integer d'une énumération générique

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

C'est vaste simplisme de la classe réelle, mais au fond, je sais que T est une énumération (si elle est pas alors il y aura beaucoup d'autres problèmes, et est une erreur logique faite par le programmeur)

Fondamentalement, je veux obtenir la valeur entière sous-jacente de MyValue. L'utilisation de Cint ou Ctype ne fonctionne pas.

+0

I complètement énumération mal lu comme IEnumerable :( –

Répondre

40

j'allais utiliser une pièce fraîche de code réflexion mais juste un Convert.ToInt32 simple, 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 
6

J'ai essayé et cela a fonctionné:

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

bien qu'il se transforme en une chaîne * * - Je croyais que tu voulais comme un entier –

3

Je sais que vous pouvez faire ce qui suit pour obtenir toutes les valeurs sous-jacentes (j'espère que ma syntaxe VB est correct ... Je travaille en C# pour la plupart de la fin):

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.

0

Une autre façon simple VB.NET est à 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

Cela ne fonctionnera pas quand ' myEnum' est un type de paramètre de type générique, car le compilateur ne sait pas s'il s'agit réellement d'une énumération et donc ne saisira pas l'opérateur '+'. –

+1

Cela ne fonctionne pas avec 'Option Strict On'. – mbomb007

0

Merci à 'Jon Skeet'. Mais son code ne fonctionne pas dans mon Excel-2016. Minwhile le code suivant fonctionne très bien:

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