如何告知ReSharper某属性非空的前提是另一布尔属性为真
实现方法
你只需要给Success属性加上[MemberNotNullWhen]注解即可,这个注解是.NET基础库(或JetBrains注解库)原生提供的,专门用于声明「布尔成员返回特定值时,关联成员非空」的依赖关系。
完整修改后的代码
using JetBrains.Annotations; // 如果用.NET自带的系统注解,引用命名空间:using System.Diagnostics.CodeAnalysis; public class MyFunctionResult { // 核心注解:当Success返回true时,Result属性一定不为null [MemberNotNullWhen(true, nameof(Result))] bool Success { get; } [CanBeNull] public SomeObj Result { get; } private MyFunctionResult() {}; public static MyFunctionResult Success([NotNull] SomeObj result) { return new MyFunctionResult { Success = true, Result = result }; } public static MyFunctionResult Failure() { return new MyFunctionResult { Success = false }; } } [NotNull] MyFunctionResult MyFunction() { ... } DoSomething([NotNull] SomeObj obj) { ... }
效果验证
- 直接访问
result.Result的场景:ReSharper会检测到Result可能为null,触发空赋值警告,符合需求。 - 先判断
if(result.Success)再访问Result的场景:ReSharper会识别到该分支下Result必然非空,不会触发警告。
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

