【问题标题】:How to obtain a list of constants in a class and their values如何获取类中的常量列表及其值
【发布时间】:2009-09-21 19:58:53
【问题描述】:

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

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

我希望运行一个函数,即 ClassConstantsToStringArray(gettype(Roles)),它将返回给我“管理员”、“基本用户”、“高级用户”

我知道反射是要走的路,我只是对使用它来获得我想要的东西还不够了解。我在网上找到了一个函数,它可以将 FieldInfo 数组中的常量名称返回给我,但仍然没有足够的智慧来为我工作。

谢谢。

【问题讨论】:

    标签: vb.net reflection constants


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

      Getting static field values of a type using reflection

      【讨论】:

      • 我也喜欢这个解决方案,但因为我已经完成了 99% 的工作,所以我只是坚持我正在使用的东西。虽然 +1。
      猜你喜欢
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多