2009-09-21 17 views
1

J'ai une classe dans VB avec quelques constantes qui représentent le nom de chaîne de mes rôles de sécurité. Je dois être capable d'appeler une fonction pour me renvoyer un tableau de chaînes (ou collection, ou autre) des valeurs de chacune de ces constantes. Je vais l'utiliser pour m'assurer que la table Roles de mes bases de données a les mêmes rôles que ceux codés dans l'application.Comment obtenir une liste de constantes dans une classe et leurs valeurs

Public Class Roles 
    Public Const Administrator = "Administrator" 
    Public Const BasicUser = "Basic User" 
    Public Const PowerUser = "Power User" 
End Class 

Je cherche à exécuter une fonction, à savoir ClassConstantsToStringArray (getType (rôles)) qui retourne à moi "Administrateur", "Utilisateur de base", "Power User"

Je sais la réflexion est la voie à suivre, je n'en sais tout simplement pas assez pour l'utiliser pour obtenir ce que je veux. J'ai trouvé une fonction sur le net qui me retournerait les noms des constantes dans un tableau FieldInfo mais qui n'a toujours pas assez d'intelligence pour que ça fonctionne pour moi.

Merci.

Répondre

3

Ok, voici comment cela se fait. Je n'ai pas fait cela tout seul, http://weblogs.asp.net/whaggard/archive/2003/02/20/2708.aspx avait la réponse, je l'ai juste couru à travers un convertisseur C# en VB.Net.

Function GetStringsFromClassConstants(ByVal type As System.Type) As String() 
    Dim constants As New ArrayList() 
    Dim fieldInfos As FieldInfo() = type.GetFields(BindingFlags.[Public] Or _ 
     BindingFlags.[Static] Or BindingFlags.FlattenHierarchy) 

    For Each fi As FieldInfo In fieldInfos 
     If fi.IsLiteral AndAlso Not fi.IsInitOnly Then 
      constants.Add(fi) 
     End If 
    Next 

    Dim ConstantsStringArray as New System.Collections.Specialized.StringCollection 

    For Each fi as FieldInfo in _ 
     DirectCast(constants.ToArray(GetType(FieldInfo)), FieldInfo()) 
     ConstantsStringArray.Add(fi.GetValue(Nothing)) 
    Next 

    Dim retVal(ConstantsStringArray.Count - 1) as String 
    ConstantsStringArray.CopyTo(retval,0) 
    Return retval  
End Function 
2

pouvez pouvez construire un objet qui est presque identique à une chaîne enum dans VB.Net. Voir mon post précédent sur le sujet ici:

Getting static field values of a type using reflection

+0

C'est une bonne solution :) – Llyle

+0

J'ai aimé cette solution aussi, mais depuis que je suis 99% du chemin, je viens coincé avec ce que je travaillais avec. +1 cependant. – Dennis

Questions connexes