Frage

Ich verwende Envdte, um in meinem neuesten Projekt Code zu generieren.

Ich habe einen Verweis auf ein Codeclass-Objekt für eine gegebene C#-Class, aber jetzt wollte ich alle seine Mitglieder (in CodeClass.MEMBERS) durchlaufen und ihre Typen überprüfen.

Ich kann es jedoch nicht schaffen, den Typ des angegebenen Mitglieds aus dem CodeLeement-Objekt abzurufen, das ich beim Schleifen durch CodeClass.members bekomme.

Wie kann ich den Typ (int, String usw.) abrufen?

PS: Reflection ist keine Option für meine Usecase.

War es hilfreich?

Lösung

CodeElement hat die Mitgliedereigenschaft, bei der es sich um eine Sammlung von CodeElement handelt. CodeElement hat eine freundliche Immobilie, von der Sie wissen können, über welche Art von Mitglied wir sprechen. Dann können Sie jedes Mitglied an die entsprechende Oberfläche werfen und sich umsehen. Die meisten Unterklassen verfügen über eine Art Eigenschaft mit den Informationen, nach denen Sie suchen.

Ich habe dies im Makro -Editor in einem Modul getippt:

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

Es nimmt einfach die Klasse an, an der sich der Cursor im Editor befindet, und zeigt die Typinformationen für jedes Feld oder eine Eigenschaft an.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top