我正在使用 EnvDTE 在我的最新项目中生成一些代码。
对于给定的 C#-Class,我有一个 CodeClass-Object 的引用,但现在我想遍历它的所有成员(在 codeClass.Members 中)并检查它们的类型。
但是,我无法从循环通过 codeClass.Members 时获得的 CodeElement-Object 中检索给定成员的类型。
如何检索类型(int、string 等)?
PS:反射不是我的用例的选项。
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
它只是获取编辑器中光标所在的类,并显示任何字段或属性的类型信息。