C#中Try模式方法的False Null Reference Warning问题求助
解决Try模式方法的空引用警告问题
核心方案:使用NotNullWhen属性
C#的空引用分析默认无法自动关联Try方法的返回值与out参数的非空状态,需要通过System.Diagnostics.CodeAnalysis命名空间下的NotNullWhen特性,显式声明「方法返回true时,out参数不为null」的逻辑。
修改你的Try方法:
using System.Diagnostics.CodeAnalysis; public bool TryGetSomeObject([NotNullWhen(true)] out SomeObject? outObject) { outObject = GetSomeObject(); return outObject != null; }
调用时,编译器会正确识别返回值与参数的关联关系,当判断返回值为true时,gotObject的空引用警告会自动消失:
if (TryGetSomeObject(out SomeObject? gotObject)) { // 此处引用gotObject不会再触发空引用警告 gotObject.DoSomething(); }
补充说明
- 必须引入
System.Diagnostics.CodeAnalysis命名空间,也可以直接使用完整限定特性名[System.Diagnostics.CodeAnalysis.NotNullWhen(true)] - 若使用.NET Framework等旧版本,需先在项目属性的「生成」选项卡中开启空引用分析,必要时安装
Microsoft.CodeAnalysis.FxCopAnalyzers分析包 - 这种方式完全遵循C#空引用分析规范,既无需冗余空检查,也不用创建无效实例,是最优雅的解决方式
内容的提问来源于stack exchange,提问作者NullReferenceException
相关产品推荐
相关产品推荐

