用途:在重构或现代化现有 C#/VB.NET 源文件时应用;从零生成新文件应改用 coding-standards 技能。
核心原则:只做高置信度修改。若某变换可能改变运行时语义且不能 100% 确定安全,保留原代码并加 // TODO: 说明潜在改进。默认目标为 .NET 10.0,应用 C# 14 语法前先核对项目实际目标;存在多目标与 .NET Framework 文件,不要盲目套用会破坏旧目标的语法。不编辑 eng/common/ 下文件,遵守 .editorconfig。
语言构造现代化:块级命名空间转文件级;删除被全局 using 覆盖的 using;NRT 仅在项目已启用或文件已有 #nullable enable 时注释,且不主动新增该指令;== null / != null 一律改为 is null / is not null;引入 ??、??= 与空条件赋值(如 customer?.Order = ...);C# 14 的 field 关键字仅用于类内无其他访问的私有后备字段。
var 策略:基本类型禁止用 var,必须写出 int、string、bool 等;类型在同行可见或明显时保留/使用 var,如强制转换、(T) 显式泛型方法、out var 泛型方法、名称已暗示返回类型的方法;复杂泛型可用 var;类型对读者不明确时写显式类型;左侧类型可见时优先目标类型 new(),但类型不可见时不用;元组解构始终可用 var。集合初始化器 List<string> items = []; 及 [.. _view.Controls.Cast<Control>()],但需要可构造数组类型时不可用。
可读性与格式:不为简洁牺牲可读性;同一操作有静态与扩展方法形式时优先扩展形式;优先调用点内联 #pragma / [SuppressMessage];多字面量参数使用命名参数且保持一致;点链超过 2 个成员访问换行;if-else if 比较同一变量转 switch 表达式;单表达式方法转表达式体,行超 60 字符时 => 换行;注意 public Foo Bar => new Foo(); 与 { get; } = new Foo(); 的语义差异,不可随意互换。
性能微优化:text.Contains("x") → Contains('x');sb.Append('x');Substring 改 AsSpan / ReadOnlySpan<char>;Count() > 0 → Any();ContainsKey + 索引器 → TryGetValue;new T[0] → Array.Empty<T>();传统 using 块改 using 声明。
注释与文档:检查拼写语法,删多余空格与不当评论;不删除有用注释而是改精确;每个类、结构、记录、接口、枚举(含私有)都要有 XML 文档,短类用 <summary>,复杂类加 <remarks><para>;重写或接口实现成员用 <inheritdoc/>;局部函数不用 XML 注释;XML 用 Unicode 字符且每层缩进 1 空格。
WinForms 专属:可空事件、object? sender 签名、EventArgs.Empty、设计器字段可空、Dispose 中 components is not null、[SupportedOSPlatform("windows")]、GDI+ 缓存作用域用 using 声明。
限制:资料未提供具体安装命令、收费、价格、平台与效果信息。使用时须逐项核对提交前检查清单,且规则内容以官方资料为准。