MaybeNull属性在返回空引用时发出警告

问题描述 投票:0回答:1

作为转向C#8可为空的引用类型的一部分,我遇到了以下代码(简化):

public string GetIfExists(string key)
{
    dict.TryGetValue(key, out var value);

    return value;
}

return行在可能返回空引用时发出警告,这是有道理的。因此,我尝试使用[return: MaybeNull]属性为该方法添加注释,但警告仍然令我感到惊讶。从documentation可以理解,即使实际类型不允许,此属性也将返回类型标记为可选null

似乎避免警告的唯一选择是标记返回类型string?。那么[return: MaybeNull]的用途是什么?

c#-8.0 nullable-reference-types
1个回答
0
投票

[return: MaybeNull]通知调用方该合同隐含一种不可为null的类型,但返回值实际上可能为null。当您的API应该是不可为null的类型(通常为通用类型参数)时,请使用MaybeNull属性,但是在某些情况下,将返回null。

这意味着您想在

您希望显示警告]时使用属性,而无需更改合同。

在两种情况下,似乎已经创建了该属性来帮助强制执行非空性(传播警告,迫使用户检查null):

在无法更改功能签名的情况下。

    涉及泛型的情况。由于泛型的特性,泛型会更难处理,您可能会遇到以下情况:不允许使用T?,但是您仍然希望该方法的用户知道结果需要被检查。
  • 您摆脱警告的唯一方法是将返回类型更改为string?(或return value!;,但这将是一个谎言:p)。
© www.soinside.com 2019 - 2024. All rights reserved.