2010-06-03 24 views
1

J'utilise EnvDTE pour générer du code dans mon dernier projet.EnvDTE Récupération du type de données d'un élément CodeElement

J'ai une référence à un objet CodeClass-Object pour une classe C# donnée mais maintenant je voulais parcourir tous ses membres (dans codeClass.Members) et vérifier leurs types.

Toutefois, je n'arrive pas à récupérer le type du membre donné à partir de l'objet CodeElement-Object que je reçois lors de la lecture de codeClass.Members.

Comment puis-je récupérer le type (int, chaîne, etc.)? PS: La réflexion n'est pas une option pour mon utilisation.

Répondre

5

CodeElement a la propriété Members, qui est une collection de CodeElement. CodeElement a une propriété Kind, à partir de laquelle vous pouvez savoir de quel type de membre nous parlons. Ensuite, vous pouvez lancer chaque membre à l'interface appropriée et jeter un coup d'œil. La plupart des sous-classes ont une propriété Type, avec les informations que vous recherchez.

Je dactylographiées cela dans l'éditeur Macro, dans un module:

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 

Il faut simplement la classe qui est l'endroit où le curseur est dans l'éditeur et affiche les informations de type pour tout champ ou une propriété.