2011-01-27 9 views
1

私の目的は、フォルダ内のDLLを列挙し、特定のインターフェイスに準拠しているクラスを探し、それらのクラスに列挙型の値を照会することです。私は、「結果」の可能性がサポートされているかどうかを質問したいと考えています。外部アセンブリのEnum値を反映する

私は自分のDLLを並べて、正しいインターフェイスに準拠したクラスを見ることができますが、それは動作していますが、次のステップはクラスを特定の列挙型で検索して値を取得することです。コード: - 私はこのメンバーが列挙知っているにもかかわらず

Private Sub GetOutcomeEnumValues(ByVal AssemblyPath As String, ByVal ClassName As String) 
     Dim ReflectedAssembly As Assembly 
     Dim ReflectedClass As Type 
     'Load DLL 
     ReflectedAssembly = System.Reflection.Assembly.LoadFrom(AssemblyPath) 
     'Load Class 
     ReflectedClass = ReflectedAssembly.GetType(ClassName) 
     'Load members 
     Dim Members() As MemberInfo 
     Members = ReflectedClass.GetMembers 
     For i As Integer = 0 To Members.Count - 1 
      'Check for the Outcomes enumeration 
      If (Members(i).Name = "Outcomes") Then 
       Dim Outcomes As System.Array 
       Outcomes = Members(i).GetType.GetEnumValues 
      End If 
     Next 
    End Sub 

私が持っている問題は、私はメンバー(私は)私の列挙型の値を与えるように見えることはできませんということです。私は「GetEnumValues」と呼ぶ場合には例外がスローされます。私はこの

Public Class Foo 
    Public Enum Outcomes 
     OK 
     Cancel 
    End Enum 
End Class 

答えて

1

のようなものがそれを手に入れたルックスを照会しています

クラス:

「enumType。提供の種類は、列挙型パラメータ名でなければなりません」少し実験したところ、次のコードを使用して効果的でした:

Private Sub GetOutcomeEnumValues(ByVal AssemblyPath As String, ByVal ClassName As String) 
    Dim ReflectedAssembly As Assembly 
    Dim ReflectedClass As Type 
    'Load DLL 
    ReflectedAssembly = System.Reflection.Assembly.LoadFrom(AssemblyPath) 
    'Load Class 
    ReflectedClass = ReflectedAssembly.GetType(ClassName & "+ Outcomes") 
    'Load members 
    Dim OutcomeNames() As String = ReflectedClass.GetEnumNames 

End Sub 
関連する問題