2009-09-21 8 views
1

私は、セキュリティロールの文字列名を表すいくつかの定数を持つVBクラスを持っています。私は、これらの定数のそれぞれの値の文字列配列(またはコレクションなど)を返す関数を呼び出せるようにする必要があります。私は、データベースの役割テーブルがアプリケーションにコード化されているのと同じ役割を持っていることを確認するためにこれを使用します。クラス内の定数のリストとその値を取得する方法

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

私に戻りますI関数を実行しているよ、すなわちClassConstantsToStringArray(GETTYPE(役割)) "管理者"、 "基本ユーザー"、 "パワーユーザー"

私は知っています反射は行く方法です、私はちょうど私が欲しいものを得るためにまだそれを使用することについて十分に知りません。私は、FieldInfo配列の定数名を返す関数をネット上に見つけましたが、それでも私のために十分な賢さはありません。

ありがとうございました。

答えて

3

[OK]を、ここではそれが行われている方法です。私は自分自身でこれをやっていませんでしたが、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

+0

また、私はこのソリューションを言っていますが、私はそこに道の99%だったので、私はちょうど私が働いていたもので立ち往生。 +1。 – Dennis

関連する問題