Envdte recuperar el tipo de datos de un código de código
Pregunta
Estoy usando EnvDTE para generar algún código en mi último proyecto.
Tengo una referencia a un CodeCLass-Object para una clase C#dada, pero ahora quería recorrer todos sus miembros (en CodeClass.Members) y verificar sus tipos.
Sin embargo, no puedo recuperar el tipo de miembro dado del CodeElement-Object que obtengo al pasar a través de CodeClass.Members.
¿Cómo puedo recuperar el tipo (int, string, etc.)?
PD: La reflexión no es una opción para mi USECase.
Solución
CodeElement tiene la propiedad de los miembros, que es una colección de CodeElement. CodeElement tiene una propiedad amable, desde la cual puede saber de qué tipo de miembro estamos hablando. Luego puede lanzar a cada miembro a la interfaz apropiada y echar un vistazo a su alrededor. La mayoría de las subclases tienen una propiedad tipo, con la información que está buscando.
Escribí esto en el editor macro, en un módulo:
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
Simplemente toma la clase donde el cursor está en el editor y muestra la información de tipo para cualquier campo o propiedad.