谁能告诉我为什么即使查找失败,.NET 泛型集合上的 TryGetValue 函数也会设置输出值?
在我看来,我们拥有 TryGetValue 的全部原因是我可以设置初始默认/失败值,并且只有在查找实际成功时才通过 TryGetValue 更改该值。这是函数的Try部分。如果在查找失败时我想要未定义或异常的行为,我不会使用 *Try*GetValue。
这个函数的要点应该是它只需要在内部进行一次查找,而在容器外部编写的任何其他方法都必须进行两次查找,以便首先确定该值是否存在,然后再检索它(使用 try -抓住)。
如果我以 Dictionary 为例,使用 TryGetValue(3, &local) 查找对 <3, 0> 会在本地返回 0。在不包含任何对 <3, x> 的映射中查找返回 0。在空映射中查找返回 0。如果 0 是我要存储的有效值,那就太糟糕了。
这意味着如果 0 是可接受的返回值,则每次失败时我都必须手动将值重置为 -1。这可能听起来微不足道,但想象一下某个对象的默认值(或任何值)需要很长时间才能构建的情况......
我是否错过了一些明显的用例,我会设置我的默认值,然后希望它被另一个我无法选择的覆盖?