gpt4 book ai didi

c# - 为什么字典不像哈希表那样访问不存在的键?

转载 作者:太空狗 更新时间:2023-10-29 22:11:40 25 4
gpt4 key购买 nike

如果我使用 Hashtable ,我可以这样写代码:

object item = hashtable[key] ?? default_value;

不管key 是否有效。出现在 Hashtable .

我不能用 Dictionary<TKey. TValue> 做到这一点.如果键不在字典中,将抛出 KeyNotFoundException。 .所以我必须这样写代码:

MyClass item;
if (!(dict.TryGetValue(key, out item))
{
item = default_value;
}

我想知道这是为什么。 Dictionary<TKey, TValue>只是 Hashtable 的包装.为什么要添加此限制?

编辑:

从另一个角度看 PopCatalin 的回答(见下文),如果字典的值是值类型,我上面写的代码将不起作用。如果我使用 Dictionary<int, int> ,那么我喜欢使用的代码如下所示:

int i = dict[key] ?? default_value;

那不会编译,因为 dict[key]不是可空类型或引用类型。

最佳答案

Dictionary<T>之间的区别和一个 Hashtable那是Dictionary<T>吗是一种通用类型,可以专门用于存储值类型和引用类型。

哈希表只能存储引用类型(通过引用传递的 Object)和装箱的值类型(也通过引用传递)。

当字典专用于值类型时,它必须“按值”而不是按引用返回这些值。因此,Dictionary<T>不能返回 null,因为 null 不是值类型的有效值

关于c# - 为什么字典不像哈希表那样访问不存在的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/399270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com