<i id='ZUpvg'><tr id='ZUpvg'><dt id='ZUpvg'><q id='ZUpvg'><span id='ZUpvg'><b id='ZUpvg'><form id='ZUpvg'><ins id='ZUpvg'></ins><ul id='ZUpvg'></ul><sub id='ZUpvg'></sub></form><legend id='ZUpvg'></legend><bdo id='ZUpvg'><pre id='ZUpvg'><center id='ZUpvg'></center></pre></bdo></b><th id='ZUpvg'></th></span></q></dt></tr></i><div id='ZUpvg'><tfoot id='ZUpvg'></tfoot><dl id='ZUpvg'><fieldset id='ZUpvg'></fieldset></dl></div>

      1. <legend id='ZUpvg'><style id='ZUpvg'><dir id='ZUpvg'><q id='ZUpvg'></q></dir></style></legend>
        <tfoot id='ZUpvg'></tfoot>

        <small id='ZUpvg'></small><noframes id='ZUpvg'>

          <bdo id='ZUpvg'></bdo><ul id='ZUpvg'></ul>

        如何使用 Roslyn 检查属性是否用自定义属性装饰?

        时间:2023-07-28
                <tbody id='6HRPH'></tbody>
              <i id='6HRPH'><tr id='6HRPH'><dt id='6HRPH'><q id='6HRPH'><span id='6HRPH'><b id='6HRPH'><form id='6HRPH'><ins id='6HRPH'></ins><ul id='6HRPH'></ul><sub id='6HRPH'></sub></form><legend id='6HRPH'></legend><bdo id='6HRPH'><pre id='6HRPH'><center id='6HRPH'></center></pre></bdo></b><th id='6HRPH'></th></span></q></dt></tr></i><div id='6HRPH'><tfoot id='6HRPH'></tfoot><dl id='6HRPH'><fieldset id='6HRPH'></fieldset></dl></div>
            1. <legend id='6HRPH'><style id='6HRPH'><dir id='6HRPH'><q id='6HRPH'></q></dir></style></legend>

              <small id='6HRPH'></small><noframes id='6HRPH'>

              <tfoot id='6HRPH'></tfoot>
                <bdo id='6HRPH'></bdo><ul id='6HRPH'></ul>

                  本文介绍了如何使用 Roslyn 检查属性是否用自定义属性装饰?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我想使用 Roslyn 分析一个 C# 类,并打算在访问的属性应用了特定属性时做一些事情.如何在 CSharpSyntaxWalker.VisitPropertyDeclaration 方法覆盖中做到这一点?

                  I want to analyse a C# class using Roslyn and intend to do something when visited property has the specific attribute applied to it. How can I do this in the CSharpSyntaxWalker.VisitPropertyDeclaration method override?

                  例如,在下面的代码块中,我想知道 Date 属性是否具有 Validation 属性,如果有,是否 IsJDate 是真还是假?

                  For example, in the following code block I want to know whether the Date property has the Validation attribute or not, and if so, whether IsJDate is true or false?

                  [Validation(IsJDate=true)]
                  public string Date {get; set;}
                  

                  初始化:

                  filesPath.ToList().ForEach(csFilePath =>
                  {
                      SyntaxTree csSyntaxTree = CSharpSyntaxTree.ParseText(csFileSourceCode);
                      // ....
                  }
                  _compiledCsCodes = CSharpCompilation.Create("CSClassesAssembly", csFiles.Select(cs => cs.CSSyntaxTree ), references);
                  foreach (CsFile csFile in csFiles)
                  {
                       csFile.FileSemanticModel = _compiledCsCodes.GetSemanticModel(csFile.FullSyntaxTree);
                  }
                  

                  推荐答案

                  最后,我通过对 Yuriy 的回答进行了一些更改找到了解决方案,如下所示:

                  Finally, I found the solution by making some changes to Yuriy's answer as following:

                  foreach (var attribute in node.AttributeLists.SelectMany(al => al.Attributes))
                  {
                      if (csFile.FileSemanticModel.GetTypeInfo(attribute).Type.ToDisplayString() == "Proj.Attributes.ValidationAttribute")
                      {
                          var arg = attribute.ArgumentList.Arguments.FirstOrDefault(aa => aa.NameEquals.Name.Identifier.Text == "IsJDate");
                          if (arg != null && arg.Expression.IsKind(SyntaxKind.TrueLiteralExpression))
                              validationKind = ValidationKind.JDate;
                      }
                  }
                  

                  这篇关于如何使用 Roslyn 检查属性是否用自定义属性装饰?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:什么时候创建属性实例? 下一篇:C# Buddy 类/元数据和反射

                  相关文章

                1. <tfoot id='7T7af'></tfoot>
                      <bdo id='7T7af'></bdo><ul id='7T7af'></ul>
                    <legend id='7T7af'><style id='7T7af'><dir id='7T7af'><q id='7T7af'></q></dir></style></legend>

                  1. <small id='7T7af'></small><noframes id='7T7af'>

                  2. <i id='7T7af'><tr id='7T7af'><dt id='7T7af'><q id='7T7af'><span id='7T7af'><b id='7T7af'><form id='7T7af'><ins id='7T7af'></ins><ul id='7T7af'></ul><sub id='7T7af'></sub></form><legend id='7T7af'></legend><bdo id='7T7af'><pre id='7T7af'><center id='7T7af'></center></pre></bdo></b><th id='7T7af'></th></span></q></dt></tr></i><div id='7T7af'><tfoot id='7T7af'></tfoot><dl id='7T7af'><fieldset id='7T7af'></fieldset></dl></div>