如何用Roslyn枚举VS2017中VB文档成员?求C#写法的VB等价代码
在Visual Studio 2017中用Roslyn枚举Visual Basic文档成员
好问题!Roslyn对C#和Visual Basic的语法节点做了区分,所以你需要使用VB专属的语法类型来实现等价功能。
等价代码实现
C#里用CSharp.Syntax.MemberDeclarationSyntax枚举成员,对应的Visual Basic版本需要使用VisualBasic.Syntax.MemberDeclarationSyntax,完整的代码写法如下:
Imports Microsoft.CodeAnalysis Imports Microsoft.CodeAnalysis.VisualBasic Imports Microsoft.CodeAnalysis.VisualBasic.Syntax ' 假设你已经获取了VB的SyntaxTree实例 Dim root = syntaxTree.GetRoot() Dim members = root.DescendantNodes().OfType(Of MemberDeclarationSyntax)()
关键说明
- 一定要引用
Microsoft.CodeAnalysis.VisualBasic命名空间(或者使用全限定类型名),因为VB的语法节点都在这个命名空间下,和C#的Microsoft.CodeAnalysis.CSharp是完全分开的。 MemberDeclarationSyntax是VB所有成员声明的基类,涵盖了类、模块、属性、方法、字段等所有常见成员类型(比如ClassBlockSyntax、FunctionStatementSyntax、PropertyStatementSyntax都继承自它),所以用OfType(Of MemberDeclarationSyntax)可以一次性枚举所有类型的成员。
额外提示
如果你需要筛选特定类型的成员(比如只找函数),可以直接指定对应的具体语法类型,比如:
Dim functions = root.DescendantNodes().OfType(Of FunctionStatementSyntax)()
内容的提问来源于stack exchange,提问作者Joginder S Nahil
相关产品推荐
相关产品推荐

