You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何告知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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 02:06:03