我正在编写一个源代码生成器,需要知道我使用 Microsoft.CodeAnalysis 向其添加功能的类是否是记录。
我可以通过切换到语法模型来做到这一点,如下所示:
public static bool IsRecord(this ITypeSymbol type)
{
if (type == null || type.TypeKind != TypeKind.Class)
return false;
bool isRecord = (type.DeclaringSyntaxReferences.Any(x => (x.SyntaxTree.GetRoot().FindNode(x.Span) is RecordDeclarationSyntax)));
return isRecord;
}
Run Code Online (Sandbox Code Playgroud)
但是有没有办法用语义模型来做到这一点?我很可能遗漏了一些明显的东西,但我已经检查了在我看来是明显的地方,并且我还在 github 上进行了搜索。Roslyn内部似乎有一个IsRecord,但我找不到任何公开的内容。如果我无法在语义模型中访问它,即使该类型来自从另一个程序集导入的代码,上述内容是否也能正常工作?
从 Roslyn API 3.9.0-2.final 版本(对应于 Visual Studio 16.9 Preview 2)开始,ITypeSymbol 现在具有可供使用的 IsRecord 属性。
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |