You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:34:14