gpt4 book ai didi

c#-8.0 - MaybeNull 属性对空引用返回发出警告

转载 作者:行者123 更新时间:2023-12-02 21:47:12 25 4
gpt4 key购买 nike

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

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

return value;
}

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

看来我避免警告的唯一选择是标记返回类型string?。那么[return: MaybeNull]有什么用呢?

最佳答案

来自文档:

[return: MaybeNull] informs callers that the contract implies a non-nullable type, but the return value may actually be null. Use the MaybeNull attribute when your API should be a non-nullable type, typically a generic type parameter, but there may be instances where null would be returned.

这意味着您希望在希望显示警告时使用该属性而不更改契约(Contract)。

创建该属性似乎是为了帮助在两种情况下强制执行非空性(传播强制用户检查空值的警告):

  • 在无法更改函数签名的情况下。
  • 在涉及泛型的情况下。由于其本质,泛型有点难以处理,您可能会发现自己处于不允许拥有 T? 的情况,但您仍然希望使用方法以了解需要检查结果。

摆脱警告的唯一方法是将返回类型更改为字符串?(或返回值!;,但这将是一个谎言:p)。

关于c#-8.0 - MaybeNull 属性对空引用返回发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59552949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com