当前位置: 首页 > news >正文

C#使用SyntaxTree获取.cs文件中的属性名和注释

有时候,我们可能需要获取.cs文件中的属性和对应的注释来生成一些代码,比如SQL查询什么的。

但使用正则匹配有时候会不准确。搜索了下,发现微软提供了代码解析的API。

具体如下两个方法:

/// <summary>
/// 获取所有属性和对应的文档注释
/// </summary>
/// <param name="codeContent"></param>
/// <returns></returns>
private Dictionary<string, string> GetPropertyAndItsComment(string codeContent)
{Dictionary<string, string> result= new Dictionary<string, string>();SyntaxTree tree = CSharpSyntaxTree.ParseText(codeContent);CompilationUnitSyntax root = tree.GetCompilationUnitRoot();var classDec = (NamespaceDeclarationSyntax)root.Members[0];var programDeclaration = (ClassDeclarationSyntax)classDec.Members[0];foreach (MemberDeclarationSyntax mem in programDeclaration.Members){if (mem is PropertyDeclarationSyntax){PropertyDeclarationSyntax pro = (PropertyDeclarationSyntax)mem;result.Add(pro.Identifier.Text, GetDocComment(mem));}}return result;
}/// <summary>
/// 获取注释内容并做处理
/// </summary>
/// <param name="pro"></param>
/// <returns></returns>
private string GetDocComment(MemberDeclarationSyntax pro)
{foreach (SyntaxTrivia trivia in pro.GetLeadingTrivia()){if (trivia.IsKind(SyntaxKind.SingleLineDocumentationCommentTrivia)|| trivia.IsKind(SyntaxKind.MultiLineDocumentationCommentTrivia)){string conmment = trivia.ToString().Replace("///","");conmment = conmment.Replace("<summary>", "");conmment = conmment.Replace("</summary>", "");conmment = conmment.Trim();return conmment;}}return "";
}

http://www.lryc.cn/news/271020.html

相关文章:

  • 基于价值认同的需求侧电能共享分布式交易策略(matlab完全复现)
  • 门控循环单元(GRU)-多输入回归预测
  • 电池管理系统BMS中SOC算法通俗解析(二)
  • YOLOv5改进 | 2023主干篇 | 华为最新VanillaNet主干替换Backbone实现大幅度长点
  • 爬虫工作量由小到大的思维转变---<第三十三章 Scrapy Redis 23年8月5日后会遇到的bug)>
  • PostgreSQL | 概念 | 什么是OLTPOLAP?
  • 2023年成都市中等职业学校学生技能大赛“网络搭建及应用”赛项竞赛样卷
  • Angular进阶之六:Progressive rendering
  • 机器人中的数值优化之线性共轭梯度法
  • 嵌入式Linux C语言介绍
  • 基于Java电影院票票务系统
  • HarmonyOS应用开发实战—开箱即用的登录页面3【ArkTS】
  • Unity坦克大战开发全流程——1)需求分析
  • python练习2【题解///考点列出///错题改正】
  • 7.2 uvm_resource_db in UVM
  • 洛谷——P3879 [TJOI2010] 阅读理解(STL:hash+set,c++)
  • Windows/Linux环境登入mysql、mysqldump命令等多方式解决方案之简易记录
  • 【基础】【Python网络爬虫】【13.免费代理与付费代理】(附大量案例代码)(建议收藏)
  • 【 YOLOv5】目标检测 YOLOv5 开源代码项目调试与讲解实战(3)-训练yolov5模型(本地)
  • fastApi 项目部署
  • python操作mysql数据库
  • Redis6.0 Client-Side缓存是什么
  • Leetcode—1572.矩阵对角线元素的和【简单】
  • 基于SpringBoot的二手手机商城系统的设计与实现
  • OpenFeign相关面试题及答案
  • c盘扩容时,d盘无法删除卷问题
  • NumPy 中级教程——广播(Broadcasting)
  • python-39-flask+nginx+Gunicorn的组合应用
  • C#-CSC编译环境搭建
  • 【JVM】一文掌握JVM垃圾回收机制