gpt4 book ai didi

c# - 罗斯林 : How to get the Namespace of a DeclarationSyntax with Roslyn C#

转载 作者:太空狗 更新时间:2023-10-29 20:13:17 25 4
gpt4 key购买 nike

我有一个包含一些类文件的 C# 解决方案。使用 Roslyn,我能够解析解决方案以获取解决方案中的项目列表。从那里,我可以获得每个项目中的文档。然后,我可以获得每个 ClassDeclarationSyntax 的列表。 这是起点。

        foreach (var v in _solution.Projects)
{
//Console.WriteLine(v.Name.ToString());
foreach (var document in v.Documents)
{
SemanticModel model = document.GetSemanticModelAsync().Result;
var classes = document.GetSyntaxRootAsync().Result.DescendantNodes().OfType<ClassDeclarationSyntax>();
foreach(var cl in classes)
{
// Starting around this point...
ClassDiagramClass cls = new ClassDiagramClass(cl, model);
diagramClasses.Add(cls);
}
}
}

我希望能够从这些对象中获取每个类中使用的变量的 namespace 。参见文件 1 有一个返回 B.Bar 类型对象的方法“getBar()”。命名空间很重要,因为它告诉您真正返回的是哪种类型的 Bar。

File1.cs

using B;
namespace A {
public class foo(){
public Bar getBar(){ return new Bar();}
}
}

File2.cs

namespace B {
public class Bar(){
}
}

File3.cs

namespace C {
public class Bar(){
}
}

问题是我不确定如何从我现在在代码中的位置获取命名空间值。有任何想法吗?

最佳答案

命名空间是语义信息,需要从语义模型中获取:

model.GetTypeInfo(cl).Type.ContainingNamespace

关于c# - 罗斯林 : How to get the Namespace of a DeclarationSyntax with Roslyn C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29479200/

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