Если я использую 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
. Почему это ограничение было добавлено к нему?
Edit:
Что касается другого взгляда на ответ PopCatalin (см. Ниже), код, который я написал выше, не будет работать, если значения словаря имеют тип значения. Если я использую Dictionary<int, int>
, то код, который я хотел бы использовать , выглядит следующим образом:
int i = dict[key] ?? default_value;
И это не скомпилируется, потому что dict[key]
не является обнуляемым или ссылочным типом.