我们使用源代码生成器从接口中生成类。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);
1条答案
按热度按时间zkure5ic1#
对于类似的事情,您希望从使用语法切换到符号模型和语义。一旦您有了TypeDeclarationSyntax,就调用SemanticModel.GetDeclaredSymbol,它将为您提供一个ITypeSymbol,您可以使用它来遍历基本层次结构、获取成员等。