Tom*_*mer 5 c#-8.0 nullable-reference-types
作为转向 C# 8 可为空引用类型的一部分,我遇到了以下代码(简化):
public string GetIfExists(string key)
{
dict.TryGetValue(key, out var value);
return value;
}
Run Code Online (Sandbox Code Playgroud)
该return行警告可能返回空引用,这是有道理的。所以我试图用一个[return: MaybeNull]属性来注释这个方法,但警告仍然出乎我的意料。从文档中,我了解到此属性将返回类型标记为 optional null,即使实际类型不允许。
似乎我避免警告的唯一选择是标记返回类型string?。那么有什么用[return: MaybeNull]呢?
从文档:
[return: MaybeNull]通知调用者合约隐含不可为空的类型,但返回值实际上可能为空。当您的 API 应该是不可为 null 的类型(通常是泛型类型参数)时,请使用 MaybeNull 属性,但在某些情况下可能会返回 null。
这意味着您希望在不更改合同的情况下显示警告时使用该属性。
似乎已创建该属性以帮助在两种情况下强制执行不可为空性(传播强制用户检查空值的警告):
T?,但您仍然希望该方法的用户知道结果需要被检查。 您必须摆脱警告的唯一方法是将返回类型更改为string?(或return value!;,但这将是谎言:p)。
| 归档时间: |
|
| 查看次数: |
1238 次 |
| 最近记录: |