Envdte получает тип данных из CodeElement
Вопрос
Я использую Envdte для создания некоторого кода в моем последнем проекте.
У меня есть ссылка на кодексок-объект для данного C#-класса, но теперь я хотел пройти через всех его членов (в Codeclass.members) и проверить их типы.
Однако мне не удается извлечь тип данного члена из объекта CodeElement, который я получаю при переходе через CodeClass.members.
Как я могу получить тип (int, String и т. Д.)?
PS: Отражение не является вариантом для моего использования.
Решение
CodeElement имеет собственность участников, которая представляет собой набор CodeElement. CodeElement имеет доброе свойство, из которого вы можете знать, о каком участнике мы говорим. Затем вы можете отбрасывать каждого участника в соответствующий интерфейс и осмотреть вокруг. У большинства подклассов есть свойство типа с информацией, которую вы ищете.
Я набрал это в макро -редакторе в модуле:
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
Это просто уходит на класс, который находится в том, где курсор находится в редакторе, и отображает информацию о типе для любого поля или свойства.