.NET 6源代码生成器=>类型声明语法获取基类型的成员

6qfn3psc  于 2022-11-19  发布在  .NET
关注(0)|答案(1)|浏览(205)

我们使用源代码生成器从接口中生成类。2这对于非扩展接口来说很有效。
然而,我们也有从另一个接口继承的接口,我们想创建一个包含来自两个接口的属性的类。
示例:

public interface Core {
    int Id { get; set; }
}

public interface Extended : Core {
    string Description { get; set; }
}

我们想要使用Roslyn Source Generators生成的内容:

public class Impl {
    public int Id { get; set; }
    public string Description { get; set; }
}

我们可以使用typeDeclarationSyntax.Members访问接口成员。在处理Extended类型的typeDeclarationSyntax时,是否可以获得基本类型的成员?例如typeDeclarationSyntax.BaseInterface.Members

解决方案

根据@Jason Malinowski的伟大回答,我想分享我用来获取语义模型的代码。

var semanticModel = compilation.GetSemanticModel(typeDeclarationSyntax.SyntaxTree);
var declaredSymbol = semanticModel.GetDeclaredSymbol(typeDeclarationSyntax);
zkure5ic

zkure5ic1#

对于类似的事情,您希望从使用语法切换到符号模型和语义。一旦您有了TypeDeclarationSyntax,就调用SemanticModel.GetDeclaredSymbol,它将为您提供一个ITypeSymbol,您可以使用它来遍历基本层次结构、获取成员等。

相关问题