c# - 如何获取所有用某些属性注释的属性?

标签 c# roslyn

我刚开始使用 Roslyn,我想找到所有用属性名称“OneToOne”注释的属性。我启动了 SyntaxVisualizer 并能够引用该节点,但我想知道是否有更简单的方法来实现这一点。这是我的:

var prop = document.GetSyntaxRoot()
             .DescendantNodes()
             .OfType<PropertyDeclarationSyntax>()
             .Where(p => p.DescendantNodes()
                 .OfType<AttributeSyntax>()
                 .Any(a => a.DescendantNodes()
                     .OfType<IdentifierNameSyntax>()
                     .Any(i => i.DescendantTokens()
                         .Any(dt => dt.Kind == SyntaxKind.IdentifierToken
                                 && dt.ValueText == "OneToOne"))))

最佳答案

好吧,我会使用语义而不是语法来解决这个问题。类似的东西(从我的头顶):

var attributeSymbol = compilation.GetTypeByMetadataName("ConsoleApplication1.OneToOneAttribute");
var propertySymbol = compilation.GetTypeByMetadataName("ConsoleApplication1.Program")
                     .GetMembers()
                     .Where(m => 
                            m.Kind == CommonSymbolKind.Property && 
                            m.GetAttributes().Any(a => a.AttributeClass.MetadataName == attributeSymbol.MetadataName));

关于c# - 如何获取所有用某些属性注释的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19594847/

相关文章:

C#:可选方法

c# - 使用HttpClient分块上传大文件到Controller,IFormFile总是为空

c# - 在 View 中找不到 ASP.Net 核心模型

c# - 复制工作表 Excel VSTO C#

c# - 从 SymbolAnalysisContext 获取语法树

c# - monodevelop - 工作调试但不是工作发布

c# - 空传播运算符和扩展方法

C# 仪器

c# - 运行时编译期间收到 “You must add a reference to assembly ' netstandard'”错误

c# - Roslyn 质疑 SyntaxTree 的构建