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

如何用Roslyn在语法树中检测C#主构造函数?

解决C#语法树中查找主构造函数的问题

你当前代码的核心问题是找错了语法节点类型:PrimaryConstructorBaseTypeSyntax是主构造函数中用于声明基类/接口的部分(比如class Test(int x) : Base(x)里的Base(x)),并非主构造函数本身。

正确的查找方式

主构造函数对应的语法节点是PrimaryConstructorDeclarationSyntax,而且ClassDeclarationSyntax直接提供了PrimaryConstructor属性,无需遍历子节点:

string testCode = @"
public class TestClass(int someInt)
{

}";

var tree = CSharpSyntaxTree.ParseText(testCode);
var root = tree.GetRoot();
var cls = root.DescendantNodes().OfType<ClassDeclarationSyntax>().Single();
// 直接通过ClassDeclarationSyntax的PrimaryConstructor属性获取主构造函数
var primaryCtr = cls.PrimaryConstructor;

Console.WriteLine(primaryCtr != null ? "primaryCtr FOUND" : "NOT FOUND!");

额外说明

如果需要获取主构造函数的参数,可以访问primaryCtr.ParameterList.Parameters,示例如下:

foreach (var param in primaryCtr.ParameterList.Parameters)
{
    Console.WriteLine($"参数名:{param.Identifier.Text},类型:{param.Type}");
}

内容的提问来源于stack exchange,提问作者Miroslav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:45:57