如何用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
相关产品推荐
相关产品推荐

