如果我使用 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/