我非常喜欢 C# 中的 try 模式,特别是因为能够使用静态分析通过
[MaybeNullWhen]
和/或 [NotNullWhen]
属性添加可空性提示。
我不明白的是它们之间的区别,在相反的条件下它们不是相同的吗?如:
布尔 | 也许为空(假) | NotNullWhen(true) |
---|---|---|
真实 | 不为空 | 不为空 |
假 | 可能为空 | 可能为空 |
我遗漏了语义差异吗?
这里有一些历史。
可空引用类型以及这两个属性是在 C# 8 中引入的。但是,语法
T?
(将泛型类型描述为“可默认”)仅在 C# 9 中引入。
所以当NRT被引入时,你不能这样写:
public bool TryGetValue(TKey key, [NotNullWhen(true)] out TValue? value)
因此,需要不同的属性。