代码之家  ›  专栏  ›  技术社区  ›  chrischu

envdte从codeelement检索数据类型

  •  1
  • chrischu  · 技术社区  · 14 年前

    我正在使用envdte在我的最新项目中生成一些代码。

    对于给定的C类,我有一个对codeclass对象的引用,但是现在我想循环遍历它的所有成员(在codeclass.members中),并检查它们的类型。

    但是,我无法从循环通过codeclass.members时获得的codeelement对象中检索给定成员的类型。

    如何检索类型(int、string等)?

    PS:反射不是我的用例的一个选项。

    1 回复  |  直到 13 年前
        1
  •  5
  •   Timores    14 年前

    codeelement具有members属性,该属性是codeelement的集合。codeElement有一个kind属性,从中您可以知道我们谈论的是什么类型的成员。然后,您可以将每个成员强制转换到适当的接口上,并四处查看。大多数子类都有一个类型属性,包含您要查找的信息。

    我在宏编辑器的模块中键入了:

    Public Sub DisplayStuff()
    
        Dim objTextSel As TextSelection
        Dim objCodeCls As CodeClass
        objTextSel = CType(DTE.ActiveDocument.Selection, TextSelection)
        objCodeCls = CType(objTextSel.ActivePoint.CodeElement(vsCMElement.vsCMElementClass), CodeClass)
    
        If objCodeCls Is Nothing Then
            MsgBox("Please launch this macro when the cursor is within a class")
            Exit Sub
        End If
    
        For Each elt As CodeElement2 In objCodeCls.Members
    
            Select Case elt.Kind
    
                Case vsCMElement.vsCMElementVariable
    
                    Dim v As CodeVariable2 = CType(elt, CodeVariable2)
    
                    MsgBox(v.Name & " is a variable of type " & v.Type.AsString)
    
                Case vsCMElement.vsCMElementProperty
    
                    Dim p As CodeProperty2 = CType(elt, CodeProperty2)
    
                    MsgBox(p.Name & " is of type " & p.Type.AsString)
            End Select
    
    
        Next
    End Sub
    

    它只接受光标在编辑器中所在的类,并显示任何字段或属性的类型信息。