我們正在使用源代碼生成器從介面生成類。這適用于非擴展介面。
但是,我們也有從另一個介面繼承的介面,我們想創建一個包含兩個介面屬性的類。
例子:
public interface Core {
int Id { get; set; }
}
public interface Extended : Core {
string Description { get; set; }
}
我們想要使用 Roslyn 源代碼生成器生成的內容:
public class Impl {
public int Id { get; set; }
public string Description { get; set; }
}
我們可以使用訪問介面成員typeDeclarationSyntax.Members。是否可以在處理型別的 typeDeclarationSyntax 時獲取基型別的成員Extended?例如typeDeclarationSyntax.BaseInterface.Members。
解決方案
根據@Jason Malinowski 的精彩回答,我想分享我用來獲取語意模型的代碼。
var semanticModel = compilation.GetSemanticModel(typeDeclarationSyntax.SyntaxTree);
var declaredSymbol = semanticModel.GetDeclaredSymbol(typeDeclarationSyntax);
uj5u.com熱心網友回復:
對于類似的事情,您希望從使用語法切換到符號模型和語意。獲得 TypeDeclarationSyntax 后,呼叫 SemanticModel.GetDeclaredSymbol,這將為您提供一個 ITypeSymbol,然后您可以使用它來遍歷基本層次結構、獲取成員等。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535016.html
標籤:。网罗斯林源生成器
上一篇:如何在安裝Npgsql包時阻止.NetNuGet包管理器安裝其他包
下一篇:NUnit中的私有方法測驗
