SuperAPI AI 工具集

migrate-nullable-references

通用与其它

查看项目

更新于 10-16 00:05

技能介绍

用途:在已有 C# 项目或解决方案中启用可空引用类型(NRT),系统性地解决全部可空警告,并准确标注公共 API,让编译器和调用方获得可靠的可空性信息。

主要能力:评估项目就绪度(语言版本、目标框架、现有 Nullable 设置、#nullable disable 指令与抑制数量);提供三种推进策略——全项目启用、先警告后标注(先用 <Nullable>warnings</Nullable>,再切到 enable)、逐文件启用(按依赖顺序加 #nullable enable);按依赖顺序修复解引用警告(CS8602、CS8600、CS8603、CS8604);对声明做标注并使用可空特性(如 [NotNullWhen]、[MemberNotNull]、[return: MaybeNull])替代多余的 !;最后审计并清理抑制。

使用方式:提供项目或解决方案路径;可选指定迁移范围(默认全项目)、构建命令与测试命令,未提供时从仓库推断。可用 dotnet --version 确认 SDK;构建检查点建议使用非增量构建(如 dotnet build --no-incremental 或先删除 bin/obj),以暴露未改动文件中的警告。可选运行 scripts/Get-NullableReadiness.ps1 -Path <project-or-solution>,加 -Json 输出机器可读结果。

适用场景:在现有项目启用 NRT、消除 CS86xx 警告、为类库公共 API 添加标注、升级带可空标注的依赖后出现新警告、复查已有 NRT 代码中可移除的抑制。

限制与注意:要求 C# 8.0+(.NET Core 3.0 / .NET Standard 2.1 及以上),低于此版本须先调整 <LangVersion> 或重定目标,且不得静默继续。迁移不得改变运行时行为,不新增分支、空检查或调用;发现潜在缺陷只加 TODO 注释,不内联修复。不要用 ?. 作为解引用警告的快捷修复,不要滥用 !,不要用 return null! 掩盖可空返回类型;对值类型加 ? 会改变运行时类型。公共 API 契约变更(返回类型改可空、参数加 ?)意图不明时应先询问用户。各步骤建议分别提交,逐文件迁移时按文件或相关批次提交。