You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ImmutableDictionary.GetValueOrDefault为何在此返回null?

问题原因与解决办法

这问题出在不可变集合的特性和F#的变量绑定规则上:

  1. ImmutableDictionary是不可变集合:它的Add方法不会修改原字典对象,而是返回一个包含新增键值对的全新字典,原字典的内容完全不会被改变。
  2. F#的let绑定是不可变的:你代码里的dict = dict.Add(key, "xyz")这一行,并不是给原dict赋值,而是在做相等性判断(判断原dict和新返回的字典是否相等),这行代码的结果是个布尔值但没被存储,原dict依然是最初创建的空字典。

所以当你调用dict.GetValueOrDefault(key)时,操作的还是那个空字典,自然找不到对应key,返回<null>。

修正后的代码可以这样写:

open System.Collections.Immutable

let dict = ImmutableDictionary.Create()
let key = "abc"
// 用let重新绑定变量,接收Add返回的新字典
let dict = dict.Add(key, "xyz")

dict.GetValueOrDefault(key) 
|> printfn "%A"

或者单独用新变量存储新字典:

open System.Collections.Immutable

let originalDict = ImmutableDictionary.Create()
let key = "abc"
let updatedDict = originalDict.Add(key, "xyz")

updatedDict.GetValueOrDefault(key) 
|> printfn "%A"

内容的提问来源于stack exchange,提问作者sdgfsdh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:07:06