2009-09-21 100 views
1

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

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

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

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

谢谢。

回答

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 
2

可以构建一个对象,该对象几乎与VB.Net中的字符串枚举相同。看到这里的主题我以前的帖子:

Getting static field values of a type using reflection

+0

这是一个很好的解决方案:) – Llyle 2009-09-21 20:30:36

+0

我喜欢这个解决方案还但因为我是的方式99%在那里,我只是坚持了什么,我正在同。 +1虽然。 – Dennis 2009-09-21 20:41:59

相关问题