Envdte ruft den Datentyp aus einem CodeLeement ab
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.
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.