gpt4 book ai didi

c# - 如何解析 C# 类的方法体内的所有公共(public)方法名称和方法调用?

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

让我们考虑以下 C# 代码示例:

public class Person
{
public string Name { get; private set; }

public Person(string name)
{
Name = name;
}

public void Evaporate()
{
Console.WriteLine("Hello World");
}

public string Speak()
{
string str = "test";
return string.Format("Hello! My name is {0}", Name);
}
}

我想从此源代码中提取所有方法/API 调用名称。使用 Roslyn,借助以下代码,我可以检索在类 Person 中声明的公共(public)方法名称。

IEnumerable<MethodDeclarationSyntax> methods = tree.Root
.DescendentNodes()
.OfType<MethodDeclarationSyntax>().ToList();

foreach(var method in methods)
{
Console.WriteLine(method.Identifier);
}

此代码响应方法名称为 EvaporateSpeak。现在我想找出公共(public)方法中的方法名称/调用,例如:我想找出 WriteLineFormat 作为响应以及其他公共(public)方法名称.我试图在 Roslyn 的帮助下生成语义模型,但我没有得到我所期望的(它可能给了我基本方法调用的名称)。有什么方法可以用Roslyn 找出内部方法名称吗?任何其他解决方案也对我有帮助。

最佳答案

Body 属性返回 BlockSyntax 类型的实例。从docs可以看出该类公开了一个 ChildNodes() 方法。所以:

IEnumerable<MethodDeclarationSyntax> methods = tree.Root
.DescendentNodes()
.OfType<MethodDeclarationSyntax>().ToList();

foreach(var method in methods)
{
Console.WriteLine(method.Identifier);
foreach (var child in method.ChildNodes().OfType<InvocationExpressionSyntax>())
{
Console.WriteLine(child.Identifier);
}
}

关于c# - 如何解析 C# 类的方法体内的所有公共(public)方法名称和方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49583191/

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