1

EnvDTE を使用して、最新のプロジェクトでいくつかのコードを生成しています。

特定の C# クラスの CodeClass-Object への参照がありますが、(codeClass.Members 内の) すべてのメンバーをループして、それらの型を確認したいと考えました。

ただし、codeClass.Members をループするときに取得する CodeElement-Object から特定のメンバーの型を取得することはできません。

タイプ (int、string など) を取得するにはどうすればよいですか?

PS: リフレクションは私のユースケースのオプションではありません。

4

1 に答える 1

5

CodeElement には、CodeElement のコレクションである Member プロパティがあります。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

エディター内でカーソルがある場所にあるクラスを取得し、任意のフィールドまたはプロパティの型情報を表示します。

于 2010-06-03T21:11:17.457 に答える