Подтвердить что ты не робот

Почему словарь [index] бросает исключение KeyNotFoundException, но Hashtable [index] нет?

Любая идея, почему это поведение отличается?

4b9b3361

Ответ 1

Здесь answer.

Основная причина Словарь бросает, что нет "ошибки", ценность, которая работает над любым V. Hashtable может возвращать null потому что ключ всегда является ссылкой тип.

Ответ 2

Таким образом, не будет никакой двусмысленности между тем, когда значение словаря [ключ] сохраняет нулевое значение и когда ключ не существует. Hashtable [key] возвращает null, если он сохраняет значение null или ключ не существует.

Ответ 3

Основная причина, по которой словарные броски являются политическими, - имеет несколько вариантов сохранения эффективности и удобства использования. Он фактически предоставляет метод (TryGetValue), который наглядно демонстрирует, что утверждения о предполагаемой "неспособности" вернуть разумную ценность ложны. TryGetValue, тем не менее, вынуждает явно неудобный синтаксис делать то, что мог сделать прожектор.

Шаблоны С# обеспечивают простой способ построения отдельных реализаций для ссылочной и семантической семантики и есть два других объекта для бесшовной обработки отсутствующих объектов с семантикой значений, которые используются tempates и некоторыми операторами (по умолчанию и с возможностью NULL). Это означает, что не было разумной причины разрушить семантику хэш-таблицы.

Это длительная политическая борьба между академическим понятием коллекции, которая настаивает на том, что каждый должен пройти проверку "есть ли у вас" и реальный факт, что такая искусственная процедура неэффективна и нарушает безопасность потоков - в принципе ( он нарушает безопасность потоков в других безопасных реализациях, делая acces неатомными).