gpt4 book ai didi

c# - 在 Roslyn 中获取方法调用的基类

转载 作者:太空宇宙 更新时间:2023-11-03 12:21:13 24 4
gpt4 key购买 nike

我可以识别应用程序每个类的方法内部的方法调用和调用。但是,我怎样才能知道它们被调用或调用的是哪个类?

例如在下面的代码中:

var methodDeclarations = classitem.DescendantNodes().OfType<MethodDeclarationSyntax>();
foreach (var memmeth in methodDeclarations)
{

var varInvocations = memmeth.DescendantNodes().OfType<InvocationExpressionSyntax>();
foreach (InvocationExpressionSyntax invoc in varInvocations)
{
Console.WriteLine("---- Invocations---");
Console.WriteLine(invoc.Expression); // output: b1.ADD
Console.WriteLine(invoc.Expression.Parent.GetText()); // output: b1.ADD(2)
}
}

例如,我可以获得“b1.ADD”和“b1.ADD(2)”作为输出。我需要从中提取的是在 b1 上调用了 ADD,它是 B 类的一个实例。如何从上面代码中的调用中获取这个 B 类?换句话说,我需要告诉这个方法属于哪个类类型。我该怎么做?

最佳答案

您需要语义模型,它允许您从编译器访问类型信息(语法树只查看文件中的语法)。

具体来说,您应该在 InvocationExpressionSyntax 上调用 GetSymbol(),转换为 IMethodSymbol,然后查看其各种属性。

关于c# - 在 Roslyn 中获取方法调用的基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47093871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com