如何获取类中的常量列表及其值

时间:2009-09-21 19:58:54

标签: vb.net reflection constants

我在VB中有一个类,其中有一些常量表示我的安全角色的字符串名称。我需要能够调用一个函数来向我返回每个常量的值的字符串数组(或集合,或其他)。我将使用它来确保我的数据库Roles表具有与编码到应用程序中相同的角色。

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

我正在寻找一个函数,即ClassConstantsToStringArray(gettype(Roles)),它将返回给我“Administrator”,“Basic User”,“Power User”

我知道反思是要走的路,我只是不知道如何使用它来获得我想要的东西。我在网上发现了一个函数,它会返回一个FieldInfo数组中的常量名称,但仍然没有足够的智能来使我能够工作。

感谢。

2 个答案:

答案 0 :(得分:3)

好的,这是如何完成的。我自己没有这样做,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

答案 1 :(得分:2)

可以构建一个与VB.Net中的字符串枚举几乎相同的对象。请参阅我之前关于此主题的帖子:

Getting static field values of a type using reflection