如果我正在使用
我想知道这是为什么。
编辑:
从 PopCatalin 的回答(见下文)另一个角度来看,如果字典的值是值类型,则我上面编写的代码将无法正常工作。如果我使用
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]
不是可空的或引用类型。