EnvDTE从CodeElement中检索数据类型

chr*_*chu 1 c# envdte

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

我有一个给定C#-Class的CodeClass-Object的引用,但现在我想循环遍历它的所有成员(在codeClass.Members中)并检查它们的类型.

但是,我无法从循环访问codeClass.Members时获得的CodeElement-Object中检索给定成员的类型.

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

PS:反射不是我的用例的选项.

Tim*_*res 5

CodeElement具有Members属性,它是CodeElement的集合.CodeElement有一个Kind属性,你可以从中知道我们正在谈论什么样的成员.然后,您可以将每个成员转换为适当的界面并环顾四周.大多数子类都有一个Type属性,包含您要查找的信息.

我在宏编辑器的模块中输入了这个:

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
Run Code Online (Sandbox Code Playgroud)

它只需要光标位于编辑器中的类,并显示任何字段或属性的类型信息.