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

请求提供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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:33:16