【问题标题】:Reflecting Enum Values in an external Assembly在外部程序集中反映枚举值
【发布时间】:2011-01-27 17:29:37
【问题描述】:

我的目标是枚举文件夹中的 DLL,查找符合特定接口的类,然后查询这些类的枚举值。这个想法是我想查询支持哪些“结果”可能性。

我已经排好我的 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

我遇到的问题是我似乎无法让 Members(i) 给我枚举值——即使我知道这个 Member 是一个枚举。当我调用“GetEnumValues”时会引发异常:

"提供的类型必须是Enum。参数名称:enumType"

我正在查询的类看起来像这样

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

【问题讨论】:

    标签: .net reflection enums


    【解决方案1】:

    知道了,经过一点实验,我用下面的代码效果很好:

    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
    

    【讨论】:

      猜你喜欢
      • 2015-07-26
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 2012-09-09
      • 1970-01-01
      • 1970-01-01
      • 2017-10-21
      相关资源
      最近更新 更多