如何用特性告知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
相关产品推荐
相关产品推荐

