2009-10-19 9 views
4

L'objet System.Collections.Hashtable est-il devenu obsolète?Les objets Hashtable sont-ils toujours utiles?

Avec la mise en œuvre et les améliorations dans les génériques de C# v2 et v3, il y a longtemps que j'ai trouvé un Hashtable plus approprié qu'un dictionnaire générique. Littéralement, je ne me souviens pas de la dernière fois que j'ai utilisé Hashtable.

Je me demandais si quelqu'un a trouvé un cas où un Hashtable est encore approprié ou préféré pour la mise en œuvre et la base de cette décision - la facilité d'utilisation, la performance, la taille de la collection, le type d'objet, etc.

MISE À JOUR : voulait dire limiter cette question à C#.

+0

Cela ressemble à une question de type wiki communautaire. Va ajouter si tout le monde pense que la question est utile. – jro

Répondre

12

Mis à part le cas évident où vous devez utiliser un Hashtable dans une API existante qui en attend une (comme les langages qui ne supportent pas encore les types génériques). Vous devrez peut-être également les utiliser si vous avez besoin d'y accéder depuis COM. Je crois que Hashtable est COM visible, alors que Dictionary ne l'est pas. A part ça, vous voulez généralement utiliser le Dictionnaire <> parce qu'il évite la boxe (un coup de performance) et fournit une sécurité de type.

+0

Ahh, COM Interop. Bon point. – jro

1

Les tables de hachage sont toujours utiles dans les cas où vous avez affaire à une langue, ou une version d'une langue, qui ne supporte pas les types génériques.

EDIT

pour C# 2.0 ou supérieur, Hashtable est vraiment seulement utile pour les scénarios suivants

  • Vous voulez obtenir la précédente sémantique d'une instance IDictionary retour nul par rapport à jeter le cas une clé n'est pas présente dans la table.
  • Faire face à une API héritage qui expose une Hashtable valeur

Hashstable est toujours utile comme carte d'usage général si vous êtes coincé avec C# 1.0 :)

+0

Merci Jared, je devrais mettre à jour ma question pour refléter C#, spécifiquement. – jro

+0

Le scénario null/throw est celui qui m'a échappé. Je préfère encore mentalement la syntaxe à cette approche par rapport au type générique de type Contient (clé), même si les meilleures pratiques semblent dire le contraire. – jro

Questions connexes