如果我使用 a 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]
它不是可为空的或引用类型。