使用带注解的扩展方法时消除可能的空引用解引用警告
解决IsNotNull扩展方法引发的空引用解引用警告
你遇到的问题是因为编译器无法通过现有的ContractAnnotation推断出调用IsNotNull()后对象的非空状态,所以即使逻辑上已经做了判断,还是会触发警告。不用手动加!抑制,改用.NET原生的Nullable特性就能让编译器正确识别。
修正后的扩展方法代码
using System.Diagnostics.CodeAnalysis; public static class ObjectExtensions { [NotNullWhen(true)] public static bool IsNotNull(this object? obj) { return obj != null; } }
关键改动说明
- 给参数
obj添加?标记,明确它是可空类型,符合Nullable上下文的语法要求 - 使用
[NotNullWhen(true)]特性:这个特性专门告诉编译器,当方法返回true时,传入的obj参数一定不为null
修正后的使用代码
if (actions.IsNotNull()) { actions.Invoke(builder); // 不再出现空引用解引用警告 }
之前的ContractAnnotation是JetBrains系列工具的注解,虽然能被Resharper识别,但.NET编译器本身更认可原生的Nullable特性,尤其是在启用了Nullable上下文的项目中,这种方式能更准确地提供空值推断信息。
内容的提问来源于stack exchange,提问作者workabyte
相关产品推荐
相关产品推荐

