SuperAPI AI 工具集

dotnet-csharp-nullable-reference-types

通用与其它

查看项目

更新于 10-16 01:13

技能介绍

用途:讲解 C# 可空引用类型(NRT)的启用、注解策略、旧代码库迁移,以及 AI 代理生成 C# 代码时最常见的注解错误。

主要能力:

  1. 启用方式。项目级推荐在 .csproj 或 Directory.Build.props 中设置 <Nullable>enable</Nullable>;迁移期可在文件顶部用 #nullable enable 逐文件启用。注意 TFM 本身不强制 NRT,真正生效的是该 MSBuild 属性,升级到 net8.0 的旧项目可能仍未启用。net6.0+ 模板默认启用,netstandard2.0/2.1 与 net48 及更早版本需显式选择加入。
  2. 迁移策略。先项目级启用,再给所有既有文件加 #nullable disable,然后逐文件移除并修复警告,用剩余指令数跟踪进度。
  3. 注解模式。区分不可空成员/参数与可空返回(如 User? FindByEmail),配合 ?? throw 处理空值。
  4. 可空性属性。使用 System.Diagnostics.CodeAnalysis 中的 [NotNullWhen]、[MemberNotNull]、[NotNullIfNotNull]、[NotNull]、[DoesNotReturn]、[AllowNull]、[DisallowNull]、[MaybeNull]、[MaybeNullWhen] 等表达编译器无法推断的契约。
  5. 常见代理错误。滥用 ! 抑制警告、忽略 CS8602 等可空警告、接口实现改变可空契约、Try 模式方法缺少 [NotNullWhen]、混淆可空值类型与 NRT(typeof(string?) == typeof(string))。
  6. 泛型约束与集合。where T : class / notnull 的差异,字典 TryGetValue、List<string?>、FirstOrDefault 返回 T? 等场景。
  7. EF Core。NRT 注解影响必填与可选列,导航属性可用 = null! 初始化。

适用场景:新项目启用 NRT、旧代码库增量迁移、编写可空性契约属性、审查 AI 生成的 C# 代码。

限制:资料未提供具体版本兼容细节、性能影响或工具链支持范围,暂未提供。