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

如何用特性告知C#编译器:throwIfNull为true时GetItem返回非空?

问题解答

是的,你可以使用System.Diagnostics.CodeAnalysis.NotNullWhenAttribute特性来实现这个需求。该特性用于告知C#编译器:当指定的布尔参数为特定值时,方法的返回值不会为null。

针对你的方法,修改后的定义如下:

using System.Diagnostics.CodeAnalysis;

[return: NotNullWhen(true)]
T? GetItem<T>(string id, bool throwIfNull = false)
{
    // 方法实现逻辑
}

当你调用GetItem并将throwIfNull设为true时,编译器会识别到此时返回值绝不会为空,不会再抛出可能的null引用警告,你也无需额外添加null检查代码。

需要注意的几个点:

  • 必须引用System.Diagnostics.CodeAnalysis命名空间才能使用该特性
  • 特性的参数要与方法中控制null行为的布尔参数对应(这里指定true,对应throwIfNull为true的场景)
  • 方法返回值仍需声明为可空的T?,因为当throwIfNull为false时,返回值可能为null

内容的提问来源于stack exchange,提问作者MaxP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:10:19