如何获取一类和它们的值的常量列表(How to obtain a list of constants

2019-07-18 20:37发布

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

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

我期待运行的函数,即ClassConstantsToStringArray(的GetType(角色)),将返回到我“管理员”,“基本用户”,“高级用户”

我知道反思是要走的路,我只是不知道有足够的了解使用它没有得到我想要的东西。 我发现,将返回到我的常量名的字段信息数组,但仍没有足够的智慧,使这项工作对我来说是净功能。

谢谢。

Answer 1:

好吧,这里是如何做的。 我不这样做我自己,虽然, 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


Answer 2:

可以建立一个对象,几乎等同于在VB.Net字符串枚举。 见我以前在这里的主题帖子:

得到一个使用反射型的静态字段值



文章来源: How to obtain a list of constants in a class and their values