请求提供Roslyn 3.11.0与4.9.2版本的SyntaxKind分类清单
区分Roslyn中SyntaxKind的Token/Node类型(3.11.0 & 4.9.2版本)
核心区分逻辑
Roslyn的SyntaxKind枚举本身没有内置类型标记,但可以通过SyntaxFacts类的静态方法精准判断:
- 调用
SyntaxFacts.IsToken(kind)返回true→ 该SyntaxKind属于SyntaxToken - 调用
SyntaxFacts.IsNode(kind)返回true→ 该SyntaxKind属于SyntaxNode
注:少数内部使用的SyntaxKind值既不属于Token也不属于Node,业务场景中可忽略这类值。
针对指定版本的完整清单获取方法
1. 环境准备
- Roslyn 3.11.0(C#9):安装NuGet包
Microsoft.CodeAnalysis.CSharp版本3.11.0 - Roslyn 4.9.2(C#12):安装NuGet包
Microsoft.CodeAnalysis.CSharp版本4.9.2
2. 生成完整分类清单的代码示例
运行以下C#代码,可直接输出对应版本的完整分类结果:
using System; using System.Linq; using Microsoft.CodeAnalysis.CSharp; class SyntaxKindClassifier { static void Main() { var roslynVersion = typeof(SyntaxKind).Assembly.GetName().Version; var csharpVersion = CSharpLanguageVersion.Latest; var allKinds = Enum.GetValues(typeof(SyntaxKind)).Cast<SyntaxKind>(); Console.WriteLine($"=== Roslyn {roslynVersion} (C#{csharpVersion}) - SyntaxToken 类型的SyntaxKind ==="); foreach (var kind in allKinds.Where(SyntaxFacts.IsToken)) { Console.WriteLine(kind); } Console.WriteLine($"\n=== Roslyn {roslynVersion} (C#{csharpVersion}) - SyntaxNode 类型的SyntaxKind ==="); foreach (var kind in allKinds.Where(SyntaxFacts.IsNode)) { Console.WriteLine(kind); } } }
版本差异示例
Roslyn 3.11.0(C#9)典型成员
- SyntaxToken:
PublicKeyword,PrivateKeyword,IntKeyword,StringLiteralToken,PlusToken - SyntaxNode:
ClassDeclaration,MethodDeclaration,IfStatement,PropertyDeclaration
Roslyn 4.9.2(C#12)新增成员
- SyntaxToken:
FileKeyword,PrimaryConstructorKeyword - SyntaxNode:
FileScopedNamespaceDeclaration,PrimaryConstructorDeclaration,CollectionExpressionSyntax
内容的提问来源于stack exchange,提问作者user27520763
相关产品推荐
相关产品推荐

