.NET-Dictionary索引重载 赋值时允许Key不存在

看到同事的一段代码,我认为其写法不安全,Key赋值前没有判断Key是否存在,但而我同事坚持认为这没问题。为方便说明我将代码简化成如下

static void Main(string[] args)
{
     Dictionary<string, bool> dict = new Dictionary<string, bool>()
     {
          { "1", true },
          { "2", false }
     };
     dict["3"] = false;
}

我认为在执行dict["3"] = false;时,因不存在key=”3”而引发System.Collections.Generic.KeyNotFoundException:异常。而且文档也是这么说到的
这里写图片描述
当我信心满满地运行这段代码,并没有看到我要的KeyNotFoundException异常。调试过程中,我发现执行dict["3"] = false;结束后,{ “3”, false }出现在dict的字典列表中。难道如果Key不存在就追加进字典列表?
怀着不安的挫败感,我找到了.Net关于Dictionary的源代码
https://github.com/dotnet/coreclr/blob/master/src/mscorlib/src/System/Collections/Generic/Dictionary.cs

这里写图片描述
重载操作符[]的set实现,调用内部Insert方法,而就在下面Add方法也调用了Insert。看到此处一切都明白,也没有必要去看Insert了。

我依然认为操作前判断Key是否存在很有必要。难保日后对Dicionary的实现不作修改,官方文档了好没有提及允许这种不判空的写法,大家小心为慎。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值