另一个可用的帮助器是:
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
可为空…