我正在尝试分析类的主要构造函数,但我找不到如何分析。在语法树中应该可以找到它,我不想创建语义模型。
代码非常简单。
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!
,我找不到任何其他方式来找到它。
让我们看看这棵树包含什么。
foreach (var item in root.DescendantNodes())
Console.WriteLine(item.GetType().Name);
输出以下内容:
ClassDeclarationSyntax
ParameterListSyntax
ParameterSyntax
PredefinedTypeSyntax
这并不奇怪,但我想这是有道理的,在解析的上下文中,主构造函数只不过是参数列表。
因此,要检测主构造函数,我必须寻找
ParameterListSyntax
,它是 ClassDeclarationSyntax
的直接后代。