2010-06-03 47 views
1

我正在使用EnvDTE在我的最新項目中生成一些代碼。EnvDTE從CodeElement檢索數據類型

我有一個給定的C#類的CodeClass對象的引用,但現在我想遍歷所有它的成員(在codeClass.Members)並檢查它們的類型。

但是,我無法設法從循環訪問codeClass.Members時得到的CodeElement-Object中獲取給定成員的類型。

如何檢索類型(int,字符串等)? PS:反射不是我的用例的選項。

回答

5

CodeElement具有Members屬性,它是CodeElement的集合。 CodeElement有一個Kind屬性,從中你可以知道我們在討論什麼類型的成員。然後,您可以將每個成員投射到適當的界面並瀏覽。大多數子類都有一個Type屬性,其中包含您正在查找的信息。

我在宏編輯器中鍵入這一點,在一個模塊中:

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 

,只是需要的類,它是當光標在編輯器中,並顯示任何字段或屬性的類型信息。