Как получить список констант в классе и их значений - PullRequest
1 голос
/ 21 сентября 2009

У меня есть класс в VB с некоторыми константами, которые представляют строковое имя моих ролей безопасности. Мне нужно иметь возможность вызвать функцию, чтобы вернуть мне строковый массив (или коллекцию, или что-то еще) значений каждой из этих констант. Я буду использовать его, чтобы убедиться, что моя таблица ролей базы данных имеет те же роли, что и в приложении.

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

Я хочу запустить функцию, то есть ClassConstantsToStringArray (gettype (Roles)), которая вернет мне «Администратор», «Базовый пользователь», «Опытный пользователь»

Я знаю, что отражение - это путь, я просто недостаточно знаю, как его использовать, чтобы получить то, что я хочу. Я нашел в сети функцию, которая возвращала бы мне имена констант в массиве FieldInfo, но у меня все еще не хватало умов, чтобы заставить меня работать.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 22 сентября 2009

Хорошо, вот как это делается. Я сам этого не делал, у http://weblogs.asp.net/whaggard/archive/2003/02/20/2708.aspx был ответ, я просто прогонял его через конвертер C # в 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 голосов
/ 22 сентября 2009

Вы можете построить объект, почти идентичный строковому перечислению в VB.Net. Смотрите мой предыдущий пост по теме здесь:

Получение значений статического поля типа с использованием отражения

...