如何利用NotNullIfNotNull特性基于函数返回值标记out参数非空?
如何利用NotNullIfNotNull特性基于函数返回值标记out参数非空?
嘿,你找对路子了!NotNullIfNotNull特性完全支持把函数返回值作为关联条件,只要把特性的参数写成"return"就可以实现你想要的效果——当函数返回的Result?不为null时,让编译器自动知道那个out参数Parameter?也肯定不是null,这样外部调用时就不用同时检查两个变量的null状态了。
你只需要修改函数的参数标记,调整后的代码如下:
#nullable enable using System.Diagnostics.CodeAnalysis; public class YourClass { public Result? GetResult([NotNullIfNotNull("return")] out Parameter? parameter) { Result? result = // ... 这里写获取结果的逻辑 if (result is not null) { // ... 你的业务处理逻辑 parameter = something; // 确保这里赋值的是非null值 return result; } parameter = null; return null; } }
几个需要注意的点:
- *
[NotNullIfNotNull("return")]*是核心:它告诉静态代码分析器,只要函数返回的结果不为null,被标记的out参数就一定不为null。 - 必须开启nullable上下文(代码开头的
#nullable enable),否则这个特性的静态分析提示不会生效。 - 这个特性需要.NET Core 3.0及以上,或者.NET Framework 4.8及以上的版本支持。
调用的时候你就能感受到便利了,比如:
var yourInstance = new YourClass(); var result = yourInstance.GetResult(out var parameter); if (result is not null) { // 这里编译器会自动识别parameter非null,不用额外写null检查 parameter.DoSomething(); }
内容来源于stack exchange
相关产品推荐
相关产品推荐

