C# 使用 Roslyn 检测主构造函数

问题描述 投票:0回答:1

我正在尝试分析类的主要构造函数,但我找不到如何分析。在语法树中应该可以找到它,我不想创建语义模型。

代码非常简单。

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

}";

var tree = CSharpSyntaxTree.ParseText(testCode);
var root = tree.GetRoot();
var cls = root.DescendantNodes().OfType<ClassDeclarationSyntax>().Single();
var primaryCtr = cls.DescendantNodes()
                    .OfType<PrimaryConstructorBaseTypeSyntax>()
                    .FirstOrDefault();

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

这段代码输出

NOT FOUND!
,我找不到任何其他方式来找到它。

c# roslyn
1个回答
0
投票

让我们看看这棵树包含什么。

foreach (var item in root.DescendantNodes())
    Console.WriteLine(item.GetType().Name);

输出以下内容:

ClassDeclarationSyntax
ParameterListSyntax
ParameterSyntax
PredefinedTypeSyntax

这并不奇怪,但我想这是有道理的,在解析的上下文中,主构造函数只不过是参数列表。

因此,要检测主构造函数,我必须寻找

ParameterListSyntax
,它是
ClassDeclarationSyntax
的直接后代。

© www.soinside.com 2019 - 2024. All rights reserved.