为什么CollectionMarshal.GetValueRefOrAddDefault返回一个可引用的TValue?&



另一个可用的帮助器是:

ref TValue GetValueRefOrNullRef<TKey, TValue>(Dictionary<TKey, TValue> dictionary, TKey key) where TKey : notnull

可以返回null ref (Unsafe.NullRef<TValue>()),但值本身是什么(因为TValue不受约束)。

但:

ref TValue? GetValueRefOrAddDefault<TKey, TValue>(Dictionary<TKey, TValue> dictionary, TKey key, out bool exists) where TKey : notnull

返回TValue?。(引用本身不能为空)

这里应该有我遗漏的东西,如果有人能解释一下,那就太好了!

我意识到这是适应引用类型所必需的。由于助手添加了default(TValue),结果显然可能是空的,而不管TValue参数的可空性。这也适用于可空值类型!

(我的思想集中在值类型上)。

这导致了一对有趣的签名,其中OrDefault等效不可为空(因为它是OrNullRef)而OrAdd可为空…

相关内容

  • 没有找到相关文章