如何使用Roslyn检查属性是否装饰有自定义属性?我想使用Roslyn分析C#类,并打算在访问的属性应用了特定属性时执行某些操作。我如何在CSharpSyntaxWalker.VisitPropertyDeclaration方法覆盖中执行此操作?例如,在下面的代码块中,我想知道Date属性是否具有Validation属性,如果有,IsJDate是true还是false?[验证(IsJDate=true)]publicstringDate{get;设置;}初始化:filesPath.ToList().ForEach(csFilePath=>{SyntaxTreecsSyntaxTree=CSharpSyntaxTree.ParseText(csFileSourceCode);//....}_compiledCsCodes=CSharpCompilation.Create("CSClassesAssembly",csFiles.Select(cs=>cs.CSSyntaxTree),references);foreach(CsFilecsFileincsFiles){csFile.FileSemanticModel=_compiledCsCodes.GetSemanticModel(csFile.FullSyntaxTree);稍微修改一下Yuriy的回答找到解决方案如下:foreach(varattributeinnode.AttributeLists.SelectMany(al=>al.Attributes)){if(csFile.FileSemanticModel.GetTypeInfo(attribute).Type.ToDisplayString()=="Proj.Attributes.ValidationAttribute"){vararg=attribute.ArgumentList.Arguments.FirstOrDefault(aa=>aa.NameEquals.Name.Identifier.Text=="IsJDate");if(arg!=null&&arg.表达式.IsKind(SyntaxKind.TrueLiteralExpression))validationKind=ValidationKind.JDate;}}使用语义模型获取属性的绑定ISymbol,然后调用GetAttributes()以上是C#学习教程:如何使用Roslyn检测属性是否被自定义属性修饰?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
