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

我对给定的C#级别的CodeClass-Object有一个引用,但是现在我想循环浏览其所有成员(在CodeClass.Members中)并检查其类型。

但是,我无法从codeclass.members循环时从CodeElement-Object中检索给定成员的类型。

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

PS:反射不是我的用户酶的选择。

有帮助吗?

解决方案

CodeElement具有成员属性,这是CodeElement的集合。 CodeElement具有友好的属性,您可以从中知道我们在谈论哪种会员。然后,您可以将每个成员投入到适当的界面并环顾四周。大多数子类都有类型属性,并带有您要查找的信息。

我在宏观编辑器中键入该模块:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top