NotNullWhen(true) 和 MaybeNullWhen(false) 有什么区别

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

我非常喜欢 C# 中的 try 模式,特别是因为能够使用静态分析通过

[MaybeNullWhen]
和/或
[NotNullWhen]
属性添加可空性提示。

我不明白的是它们之间的区别,在相反的条件下它们不是相同的吗?如:

布尔 也许为空(假) NotNullWhen(true)
真实 不为空 不为空
可能为空 可能为空

我遗漏了语义差异吗?

c# .net
1个回答
0
投票

这里有一些历史。

可空引用类型以及这两个属性是在 C# 8 中引入的。但是,语法

T?
(将泛型类型描述为“可默认”)仅在 C# 9 中引入。

所以当NRT被引入时,你不能这样写:

public bool TryGetValue(TKey key, [NotNullWhen(true)] out TValue? value)

因此,需要不同的属性。

© www.soinside.com 2019 - 2024. All rights reserved.